要するに、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_socket
(unix_socket
MariaDBで読むことができます)。これらのソケットはパスワードを無視し、パスワードチェックなしで対応する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ユーザーでのみ発生します。