MySQL 本地主机访问被拒绝,直到刷新

MySQL localhost access denied, until flush

我们的服务器出现了一个非常奇怪的问题。

任何用户(包括 root)都无法访问本地系统上的 mysql,它会在刷新之间切换。

我们正在使用一个简单的 php 脚本来测试它...

$username = "test";
$password = "pass123";

$conn = new mysqli("localhost", $username, $password);
if ($conn->connect_error) {echo "[localhost] Connection failed: " . $conn->connect_error;} else echo "[localhost] Connected successfully";
echo "<hr>";

$conn = new mysqli("127.0.0.1", $username, $password);
if ($conn->connect_error) {echo "[127.0.0.1] Connection failed: " . $conn->connect_error;} else echo "[127.0.0.1] Connected successfully";
echo "<hr>";

$conn = new mysqli("192.168.1.2", $username, $password);
if ($conn->connect_error) {echo "[192.168.1.2] Connection failed: " . $conn->connect_error;} else echo "[192.168.1.2] Connected successfully";

那么让我逐步介绍一下顺序。

  1. MySQL 用户已配置,user@% 密码为 123,在所有数据库上具有完整的服务器权限。
  2. PHP 脚本是 运行。前两个测试因访问 denied 而失败。最后一个成功
  3. Mysql 用户重新配置:user@127.0.0.1
  4. 脚本运行:全部三个拒绝
  5. MySQL Flush Privs
  6. 前两个成功。最后失败。 (有道理)
  7. MySQL 用户配置:user@% (步骤 1 的原件)
  8. 脚本运行:三个都成功了。 (万岁?没有)
  9. MySQL 刷新权限(and/or 服务器重启)
  10. 返回第 2 步。

我们无法获取 Coldfusion 或 PHP 来维持连接。它首先工作,第一个连接,当 user@127.0.0.1(在 mysql 中如此配置),但随后在 coldfusion 中失败,并且 php 无法可靠地连接,具体取决于服务重启或刷新。 PHP 确实概述了问题,如上所示。但是冷聚变的 JDBC 连接器似乎随机工作或不工作。

知道这里发生了什么吗? user@% 应该总是有效,不是吗?


补充说明:

如果我没记错的话,有一次我发现我需要有 2 个用户。在继续之前检查是否存在第二个 user@localhost 用户。

这是因为 % 实际上并未匹配 UNIX 套接字上的本地连接,而是将使用 user@localhost 记录

这个问题可能会有帮助:Mysql enabling remote and local access

请记住,对用户 table 的任何更改都需要 FLUSH PRIVILEGES 才能生效。

找到答案了,抱歉,伙计们,应该再研究一下。 https://serverfault.com/questions/122472/allowing-wildcard-access-on-mysql-db-getting-error-access-denied-for-use

有时我们通过谈论橡皮鸭效应找到正确的关键词。

基本上,好吧,显然,mysql 默认情况下包含一个空白用户记录,主机为 localhost,它取代任何用户@%。导致这种行为。 删除用户,问题解决。现在我的防火墙可以重新打开了...哇。

我提到的 IIS 问题是另一天的话题,我想...