设置 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
不要忘记刷新权限,否则您仍然可以无需密码登录。