尽管设置了密码,但 MySQL 允许无密码连接
Posted
技术标签:
【中文标题】尽管设置了密码,但 MySQL 允许无密码连接【英文标题】:MySQL allows connection without password although password is set 【发布时间】:2013-03-29 18:36:57 【问题描述】:我正在设置一个 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
并按回车键输入密码,那么我会得到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)
【问题讨论】:
你设置密码后在MySQL中做了FLUSH PRIVILEGES;
吗?您也可以尝试使用mysqladmin -u root reload
和mysqladmin -u root refresh
(没有密码,因为目前它似乎想要这样工作)。
是的,我在设置它们后立即执行FLUSH PRIVILEGES
。我运行了你提到的这两个命令,没有任何改变
嗯...如果这些都不起作用,您可以重新启动 MySQL 看看是否有什么不同吗?不确定 Percona 使用什么,但在 Debian 中你使用 sudo /etc/init.d/mysql restart
而在 CentOS/RHEL 中你使用 sudo service mysqld restart
我也试过重启(Ubuntu box),还是一样。
好的,让我们看看你是如何尝试设置密码的。我这样做的方式是:sudo mysqladmin -u root password 'test'
假设我想要一个愚蠢的测试密码 - 你用什么来设置它?
【参考方案1】:
面部护理。原来在 /root 上有一个带有用户名和密码的 .my.cnf,因此在使用 root 帐户时只能使用 mysql
登录(这就是我正在使用的)。它是由 Chef 配方创建的(percona 是通过 Chef 安装的),我不知道。
提示是查看show grants
的输出。即使我没有输入密码它仍然说我输入了一个,所以一定有一个地方!
【讨论】:
以上是关于尽管设置了密码,但 MySQL 允许无密码连接的主要内容,如果未能解决你的问题,请参考以下文章