完全奇怪:删除一个MySQL用户后,我仍然可以用空密码作为该用户登录

完全奇怪:删除一个MySQL用户后,我仍然可以用空密码作为该用户登录,mysql,mysql-management,percona,Mysql,Mysql Management,Percona,在Arch Linux上使用MySQL 5.5,当我创建一个带有密码的localhost用户并为其授予所有表的所有权限,然后删除该用户时,我仍然可以作为该用户登录,而无需输入密码 复制步骤: # mysql -u root -h localhost -p Enter password: <root password> mysql> create user 'test'@'localhost' identified by 'testing123'; mysql> gr

在Arch Linux上使用MySQL 5.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?)

不仅如此,不存在的测试用户仍然可以行使所有相同的权限。主要的安全问题。如果我重新启动服务器,它仍然允许我不用密码登录。

我终于知道发生了什么。默认情况下,在用户表中有一个匿名用户@localhost。此用户将自动与任何尝试的用户名匹配,并作为该匿名用户登录。有点奇怪,我知道。要删除匿名用户,请以root用户身份登录并执行以下命令:

drop user ''@localhost;

如果您以root用户身份登录并发出select*from mysql.user where user='test';现在,是否显示用户?在我看来,这就像一个bug。它仍然显示空集0.00秒,结果与我在复制上面的步骤中尝试的结果相同。我还尝试重新启动MySQL,甚至多次重新启动整个机器。所有的结果都是一样的。@DavidPesta:你最近升级过mySQL吗?也许某些特权表已经损坏了。请检查此处的mysql升级命令:是,正如本页所述:如果要阻止客户端以匿名用户身份连接而不使用密码,则应为每个匿名帐户分配密码,或者删除这些帐户。谢谢。有一个不同的问题,我用密码创建的用户在使用密码时不被允许,但在没有密码的情况下被允许进入。删除了另一个用户,我又开始工作了。