设置root密码后为什么MYSQL仍然允许我不用密码login?

设置root密码后,为什么MYSQL仍然允许我在命令行中没有密码的情况下login? 我可以在根unix提示符下键入“mysql”,它要求没有密码,并且仍然允许我进行root访问。 我不明白为什么“mysql -u root”现在不是要求我在帐户上设置的密码。

另外,我不能以root身份login到远程机器上的mysql。 我没有正确configuration下面? 我得到的错误:“主机…是不允许连接到这个MySQL服务器。我没有configuration为'%'?

这是我的用户表:

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) 

看起来密码是在'root'@'localhost'用户条目中设置的,而不是在'root'@'%'条目上设置的。 基于此,可以允许无密码的authentication。

出于安全考虑,请重新考虑允许从任何地方进行root访问。 如果你确实需要它,那么只要摆脱localhost的规格:

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

并设置'root'@'%'用户的密码:

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

那么,答案是正确的,你需要删除没有列出密码的“根”行。

此外,看起来像你在任何地方(?!?!)使用任何用户或通过时都允许连接。 可能是个坏主意。 我会做这样的事情:

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

不要忘记使用FLUSH PRIVILEGES,否则您仍然可以不用密码login。