尽管设置了密码,但 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 rootmysql 进行连接。如果我执行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 reloadmysqladmin -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 允许无密码连接的主要内容,如果未能解决你的问题,请参考以下文章

81. jupyter notebook设置无密码

linux下怎样设置ssh无密码登录

linux下怎样设置ssh无密码登录

linux下怎样设置ssh无密码登录

个人电脑搭建的php+mysql环境如无数据库密码或者密码简单会被入侵吗?

在MAC下使用VSCode连接远程Linux服务器(无密)