设置root密码后为什么MYSQL仍然允许我无需密码登录?

设置root密码后为什么MYSQL仍然允许我无需密码登录?

设置 root 密码后,为什么 MYSQL 仍允许我从命令行无需密码登录?我可以在 root unix 提示符下输入“mysql”,它不需要密码,仍然允许我访问 root。我不明白为什么“mysql -u root”现在不要求我输入我在帐户上设置的密码。

另外,我无法以“root”身份从远程计算机登录 mysql。我下面的配置不正确吗?我收到错误:“主机...不允许连接到此 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)

答案1

看起来密码是在'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');

答案2

嗯,答案就在该表中 - 您需要删除没有列出密码的“root”行。

此外,看起来您允许在不使用用户或密码的情况下从任何地方进行连接(?!?!)。这可能是一个坏主意。我会这样做:

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

答案3

不要忘记刷新权限,否则您仍然可以无需密码登录。

相关内容