web-dev-qa-db-ja.com

Mysql(MariaDB 10.0.29):rootパスワードを設定しますが、パスワードを要求せずにログインできますか?

Rootパスワードを設定してmysqlを保護したい。ルートパスワードを正常にリセットしました。

MariaDB [(none)]> select Host, User, Password from mysql.user;
+-----------+------+-------------------------------------------+
| Host      | User | Password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *58319282EAB9E38D49CA25844B73DA62C80C2ABC |
+-----------+------+-------------------------------------------+
1 row in set (0.00 sec)

ただし、フラッシュ権限を取得した後、Mysqlを再起動しても、パスワードを入力せずに(ローカルホストで)mysqlにログインできます。

root@myhost:/# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.0.29-MariaDB SLE 12 SP1 package

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

接続時にmysqlにパスワードを要求させるにはどうすればよいですか?ありがとう!

29
thanhpt

MySQLテーブルには、pluginという列があります。

MariaDB [(none)]> SELECT Host, user, password, plugin FROM mysql.user LIMIT 0,1;
+-----------+------+-------------------------------------------+--------+
| Host      | user | password                                  | plugin |
+-----------+------+-------------------------------------------+--------+
| localhost | root | *                                         |        |
+-----------+------+-------------------------------------------+--------+
1 row in set (0.00 sec)

正しく覚えている場合、mariaDBインストールのデフォルトプラグインは「console」または「unix_socket」であり、このプラグインを使用すると、コンソールからパスワードなしで入力できます。ただし、パスワードを使用した認証も無効にし、別のクライアントから接続することはできません。

プラグインフィールドを空の( '')値で更新してから、FLUSH PRIVILEGESを使用します。

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

これで、問題は解決しました。

53
Sakura Kinomoto

これを変更する必要があることがわかりました。

UPDATE mysql.user SET plugin = 'auth_socket' WHERE user = 'root' AND Host = 'localhost';

 UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND Host = 'localhost';

これはパスワードAFAICTのプラグインです。

2
motherwell

この質問は古いことは知っていますが、同じ問題があり、以下の手順で問題を解決しました。

linuxターミナルで、以下のコマンドを実行してrootユーザーの新しいパスワードを設定します。rootパスワードが既に設定されている場合は、この手順をスキップします。

mysqladmin --user=root password "newpassword"

Mysqlにログイン

mysql -uroot -p

「root」ユーザーのパスワードを入力してください

MariaDBコンソールで次のクエリを実行します

MariaDB [(none)]> select Host,user,password from mysql.user;

「ユーザー」列の値を持つレコードが ''(空)であることに気付く場合があります。次のクエリを使用してそれらのレコードを削除してください

MariaDB [(none)]> delete from mysql.user where user='';
MariaDB [(none)]> flush privileges;
Query OK, 2 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
#$ mysql
ERROR 1045 (28000): Access denied for user ''@'localhost' (using password: NO)

上記の手順を実行した後、パスワードなしでmysqlにログインすることはできません。

2
NCode