web-dev-qa-db-ja.com

rootパスワードを設定した後、MYSQLでパスワードなしでログインできるのはなぜですか?

Rootパスワードを設定した後、MYSQLでコマンドラインからパスワードなしでログインできるのはなぜですか?ルートのUnixプロンプトで「mysql」と入力すると、パスワードを要求されず、ルートアクセスが許可されます。 「mysql -u root」がアカウントに設定したパスワードの入力を求められなくなった理由がわかりません。

また、リモートマシンからmysqlに「root」としてログインできません。以下で正しく設定していませんか? 「ホスト...はこのMySQLサーバーへの接続を許可されていません。 '%'を構成しませんでしたか?

これが私のユーザーテーブルです:

mysql> select Host,user,password from user;
+-----------+------+-------------------------------------------+
| Host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| %         | root |                                           |
| 127.0.0.1 | root |                                           |
| ::1       | root |                                           |
| localhost |      |                                           |
| %         |      |                                           |
+-----------+------+-------------------------------------------+
6 rows in set (0.00 sec)
10
djangofan

パスワードは'root'@'localhost'ユーザーエントリに設定されているようですが、'root'@'%'エントリには設定されていません。これに基づいて、パスワードなしの認証が許可されます。

セキュリティ上の理由から、どこからでもrootアクセスを許可することを再検討してください。必要な場合は、localhostの指定を削除してください。

drop user 'root'@'localhost';
drop user 'root'@'127.0.0.1';
drop user 'root'@'::1';

'root'@'%'ユーザーのパスワードを設定します。

set password for 'root'@'%' = password('passwordhere');
4
Shane Madden

まあ、答えはその表のとおりです。パスワードがリストされていない「ルート」行を削除する必要があります。

また、ユーザーまたはパスを使用しない場合は、どこからでも(?!?!)接続を許可するように見えます。おそらく悪い考えです。私は次のようなことをします:

mysql> use mysql;
mysql> delete from user where password = "";
4
EEAA

FLUSH PRIVILEGESを忘れないでください。パスワードがない場合でもログインできます。

2
tgunr