ubuntu 16.04の通常のユーザーアカウントからmysqlユーザールートとしてログインできない


203

私はパッケージと一緒のUbuntu 16.04 LTSをインストールしphpmariadbそしてnginxmysql_secure_installationルートパスワードを実行して変更しました。

mysqlUbuntuに通常のユーザーアカウントとしてログインしているときにルートアカウントを使用してログインしようとすると、アクセスが拒否されます。

を使用してログインするとsudo mysql、mysqlはパスワードを要求しません。実行するmysql_secure_installtionと、古い設定が永久に設定されないことがわかります。

私は何を間違えていますか?

回答:


359

最近、Ubuntu 15.04を16.04にアップグレードしましたが、これでうまくいきました。

  1. まず、sudo mysqlで接続します

    sudo mysql -u root
    
  2. データベースに存在するアカウントを確認してください

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. 現在のroot @ localhostアカウントを削除する

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. ユーザーを再作成する

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. ユーザーに許可を与えます(特権をフラッシュすることを忘れないでください)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. MySQLを終了し、sudoなしで再接続を試みます。

これが誰かを助けることを願っています:)


16
これは私のために働いた唯一のものでした、誰かが16.04にmysql-serverをインストールしたときにrootユーザーで何が起こったのかを正確に知っていますか?
ルッギ

32
%ちょっと待って、どこからでも接続できるという意味ではありません...
スティービーG

9
行を次のように変更できます。CREATE USER 'root' @ 'localhost' IDENTIFIED BY '';
vladnev 16

11
セキュリティが懸念される場合:安全でないroot @ localhost mysql接続パターンは、ローカル開発の必需品ですが、他のどこにも絶対に現れないはずです。
チャーニーケイ

5
:ルートは、これは後で実行せずに付与することはできませんので、ルートに「助成金を」与えるものではありません。ここで新しいrootユーザーのgrant文dba.stackexchange.com/a/62046/115679が にgrant文を変更してくださいgrant all privileges on *.* to 'root'@'localhost' with grant option;
ローレン

132

5.7をインストールし、rootユーザーにパスワードを提供しない場合、auth_socketプラグインが使用されます。そのプラグインは気にせず、パスワードを必要としません。ユーザーがUNIXソケットを使用して接続しているかどうかを確認し、ユーザー名を比較します。

「plugin:auth_socket」を使用したMySQL 5.7のユーザーパスワードの変更から取得

そのため、pluginバックを次のように変更するにはmysql_native_password

  1. sudoでログイン:

    sudo mysql -u root
    
  2. plugin単一のコマンドでパスワードを変更して設定します。

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
    

もちろん、上記のコマンドを使用して空のパスワードを設定することもできます。

記録のためだけに(およびMariaDB < 10.2ユーザー)plugin、パスワードを提供せずに(パスワードを空のままにして)変更する別の方法もあります。

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;

2
おかげで、何らかの理由で、apt-getのアップグレード後に突然これが自動的に設定されました
...-Tominator

4
また、私はこの回答がより好きです-それははるかに破壊的ではありません
;

3
MariaDB <10.2の場合は、パスワードと一緒にプラグイン変更するには、ここでのクエリがあります:UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;出典:stackoverflow.com/a/41537019/1004587
Pothi Kalimuthu

5
これが受け入れ答えなければなりません
ジオC.

3
これを2回投票できるといいのですが。
ジェームススミス

21

要するに、MariaDBで

UPDATE mysql.user SET plugin = 'mysql_native_password', 
      Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

NEWPASSWORDを必要なパスワードに置き換えます。

ここでの問題は、MariaDBまたはMySQLがインストール/更新されるとき(特にある時点でルートがパスワードなしで設定されている場合)、Usersテーブルでパスワードが実際に空(または無視)であり、ログインは対応するシステムユーザーに依存することですMySQLユーザーに。システムルートに切り替えて、次のように入力すると、次のようにテストできます。

mysql -uroot -p

次に、パスワードを入力しないか、間違ったパスワードを入力します。おそらくあなたは許可されます(# mysqlパスワードが無関係でユーザーが定義されているという単純な方法で、UNIXルートからログインすることさえできるかもしれません)。

それで何が起きているのでしょうか?さて、rootとしてログインして次の操作を行うと:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

注意してくださいauth_socketunix_socketMariaDBで読むことができます)。これらのソケットはパスワードを無視し、パスワードチェックなしで対応するUnixユーザーを許可します。これが、rootでログインできますが、別のユーザーではログインできない理由です。

そのため、解決策は、ユーザーを使用しないように更新しauth_socket/unix_socket、パスワードを適切に設定することです。

2017年のUbuntuバージョン16にあるMariaDB(<10.2、以下のコメントを参照)ではこれで十分です。NEWPASSWORDはパスワードです。mysql_native_passwordそのまま入力します。

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(プラグインを空に設定しても機能する可能性があります。YMMV。私はこれを試しませんでした。したがって、これは代替です。)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

そうでなければ:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

それから

FLUSH PRIVILEGES;

記録のために、ユーザーを削除して '%'で再作成するソリューションでは、データベースから完全にロックアウトされ、grantステートメントを正確に取得しない限り、他の問題を引き起こす可能性があります-既にあるルートを簡単に更新する方が簡単です。

私の経験では、他のユーザーは初期インストール/更新の一部ではなく手動で追加されるため、この問題はrootユーザーでのみ発生します。


2
これが完璧に機能することがわかりました。rootパスワードを変更しmysql_secure_installationても同じ効果が得られないのはなぜだろうと思います。新しいパスワードはどこに保存されますか?
Mausy5043

回答を編集して、各コマンドについて詳しく説明してください。どちらが該当するのか明確ではありません。UPDATEMariaDB <10.2とALTER他のバージョンに適用されるのは2つですか?そして、2番目UPDATEは1 番目の代替手段ですか、それとも両方を入力する必要がありますか?最後に、「mysql_native_password」は逐語的に入力するものですか、それともMySQLの意図したルートパスワードに置き換える必要がありますか?
マイケルシェパー

1
@MichaelScheperしばらく前のことなので、あまり編集したくありませんが、ここに覚えています。(1)最初のUPDATEのみを実行します(10.2未満は要件ではない場合があります)。(2)はい、「mysql_native_password」をそのまま入力します。基本的に、あなたがしていることはmariadbに「Unix特権を使用しないで、データベース特権を使用してください」と伝えることです。mysql_native_passwordそのオプションです。
ガッツァー

くそー私は「特権」を間違ってつづった!
ガッツァー

1
編集時間制限を1分半だけ逃したようです。それにも時々イライラします。とにかく、ありがとう!
マイケルシェパー

8

ベースリポジトリからMySQL / MariaDBをインストールした場合、ユーザーはUnixログインからMySQLルートユーザーとしてMySQLにログインできません(sudoアクセスがある場合は適用されません)

  1. MySQLルートシェルにログインします。

    $ sudo mysql -u root -p
    
  2. 以下のクエリを実行します。

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. 新しいシェルを開いてから:

    $ mysql -u root -p
    

ソース


これを行ったとき、ルートとしてmysqlをsudoできなくなりました。最初にsuする必要があり、次にmysqlにrootとしてログインできました。そこで、auth_socketに戻しました。
まで

単一のコマンド:mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
クリスストリチンスキー

MySQLインスタンスへのアクセスを失いたい場合、この答えが簡単な方法です。
ダニラ・ヴェルシニン

2

新しいmysqlアカウントを作成してみてください、私にとってはうまくいきました(mysql 5.7.12):

  1. sudoとしてログイン:

    sudo mysql -uroot
    
  2. 新しいユーザーを作成し、特権(パスワードなし)を付与します。

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. 新しいユーザーとしてログイン:

    mysql -uadmin
    

2

私は2つのことをしなければなりませんでした(@Todorと@Loremhipsumに感謝します):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

その後:

FLUSH PRIVILEGES;

ユーザーを削除することはお勧めしませんroot


1

最初にこのコードを試してください、

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

その後、

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

次に、次のキーを押しCtrl+Zて入力bgします。プロセスをフォアグラウンドからバックグラウンドまで実行し、次の方法でアクセスを確認します。

mysql -u root -proot
mysql> show grants;

1

rootユーザーでmysqlコマンドを実行するだけの場合、root @ localhostでソケット認証が有効になっているため、パスワードを要求されることなくアクセスが許可されます。。

パスワードを設定する唯一の方法は、次のようなネイティブ認証に切り替えることです。

$ sudo mysql

mysql> ALTER USER 'root' @ 'localhost' mysql_native_passwordで 'test'で識別;


0

MariaDBを使用するために作成したいくつかのプロビジョニングスクリプトを調整しており、この問題に遭遇しました。ここで多くの情報をつなぎ合わせると、Gazzerの答えがこの問題で本当にゼロになります。すべてがauth_socket/ unix_socket設定に要約されます。

そのため、MariaDB 5.5(Ubuntu 14.04)およびMariaDB 10(Ubuntu 16.04)を使用している場合、MySQLにログインしてこのコマンドを実行すると、すぐに問題が解決しました。

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

他の回答(Loremhipsum によるこの投稿の時点で最も投票数の多い回答を含む)、ユーザーをドロップしてから再作成することを推奨することにより、悪い習慣を本当に助長します。私にとって、それはかなり根本的な解決策です。plugin値を無効にし、特権をフラッシュし、人生を続ける最良の/最も簡単なソリューションです。


-1

私は同じ問題を抱えていて、以下を実行すると修正されました:

mysql_upgrade --force

残念ながらそれはうまくいきませんでした。Ubuntuを再インストールしています。
コードスコープ

1
ubuntu 16.04を新規インストールし、mariad-serverをインストールしました。インストール後、mysql_secure_installationを実行してパスワードを設定しました。mysql_secure_installationの残りのステップを実行した後、もう一度実行しましたが、変更が保存されていないようです。それでも通常のユーザーアカウントからログインできません。バグでしょうか?
コードスコープ

これは決して役に立ちません。この問題は、MariaDBバイナリの実際のインストールとは関係ありませんが、ユーザーが非標準のroot設定でplugin設定されていることとは関係ありません。DBのアップグレードがこのような場合に役立つかもしれない唯一のエッジケースは、mysql_upgradeプロセス自体がplugin疑わしい設定を説明する場合です。
JakeGould
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.