3

ArchLinuxでMySQL5.5を使用して、パスワードを使用してlocalhostユーザーを作成し、すべてのテーブルにすべての権限を付与してからそのユーザーを削除すると、パスワードを入力しなくてもそのユーザーとしてログインできます。

再現する手順:

# mysql -u root -h localhost -p
  Enter password: <root password>

mysql> create user 'test'@'localhost' identified by 'testing123';
mysql> grant all on *.* to 'test'@'localhost' identified by 'testing123';
mysql> select * from mysql.user where user='test';
       1 row in set (0.00 sec)
mysql> exit

# mysql -u test -h localhost -p
  Enter password: testing123

mysql> show databases;
mysql> exit

# mysql -u root -h localhost -p
  Enter password: <root password>

mysql> delete from mysql.user where user='test';
       Query OK, 1 row affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
mysql> select * from mysql.user where user='test';
       Empty set (0.00 sec)
mysql> exit

# mysql -u test -h localhost

mysql> (Why?)

それだけでなく、「存在しない」テストユーザーは引き続き同じ特権をすべて行使できます。主要なセキュリティ問題。サーバーを再起動しても、パスワードなしでログインできます。

4

1 に答える 1

4

私はついに何が起こっているのかを理解しました。デフォルトでは、userテーブルには匿名ユーザー@localhostがあります。このユーザーは、試行されたユーザー名と自動的に照合され、その匿名ユーザーとしてログインします。ちょっと奇妙なことだと思います。匿名ユーザーを削除するには、rootとしてログインし、次のコマンドを実行します。

drop user ''@localhost;
于 2011-06-30T07:29:54.793 に答える