我正在设置MySQL服务器(实际上是Percona服务器,但这无关紧要)我正在为root用户设置密码。最后,我有这个:
mysql> select host, user, password from user;
+-----------+------------------+-------------------------------------------+
| host | user | password |
+-----------+------------------+-------------------------------------------+
| localhost | root | *huge string here, no kidding |
| localhost | debian-sys-maint | *another huge string here |
+-----------+------------------+-------------------------------------------+
2 rows in set (0.00 sec)
我认为这不应该允许root用户在没有密码的情况下进行连接。但是,如果我转到命令行,我可以与mysql -u root
或mysql
联系。如果我执行mysql -u root -p
并按Enter键输入密码,那么我会获得ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO).
有人可以向我解释如何确保用户只能连接密码吗?
编辑:如果相关,我使用SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somethinghere');
编辑:show grants
的输出,表示我使用了密码登录,但我没有。
mysql> show grants;
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*huge string here, no kidding' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
答案 0 :(得分:12)
捂脸。事实证明在/ root上有一个带有用户名和密码的.my.cnf,因此在使用root帐户时可以只用mysql
登录(这就是我正在使用的)。它是由Chef配方创建的(percona是通过Chef安装的),我不知道它。
提示是查看show grants
的输出。即使我没有输入密码,它仍然说我输入了密码,所以必须有一个密码!