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";
那么让我逐步介绍一下顺序。
- MySQL 用户已配置,user@% 密码为 123,在所有数据库上具有完整的服务器权限。
- PHP 脚本是 运行。前两个测试因访问 denied 而失败。最后一个成功。
- Mysql 用户重新配置:user@127.0.0.1
- 脚本运行:全部三个拒绝。
- MySQL Flush Privs
- 前两个成功。最后失败。 (有道理)
- MySQL 用户配置:user@% (步骤 1 的原件)
- 脚本运行:三个都成功了。 (万岁?没有)
- MySQL 刷新权限(and/or 服务器重启)
- 返回第 2 步。
我们无法获取 Coldfusion 或 PHP 来维持连接。它首先工作,第一个连接,当 user@127.0.0.1(在 mysql 中如此配置),但随后在 coldfusion 中失败,并且 php 无法可靠地连接,具体取决于服务重启或刷新。
PHP 确实概述了问题,如上所示。但是冷聚变的 JDBC 连接器似乎随机工作或不工作。
知道这里发生了什么吗? user@% 应该总是有效,不是吗?
- MySQL v5.5,PHP v 7,Coldfusion v11(jdbc .38 最新版)。 Windows 服务器 2012。
- my.cnf 未配置绑定地址(允许所有主机)。
- 最大连接数 = 500
- 禁用 ipv6 (OxFFFFFF)
- 防火墙已关闭。
- 相同的数据库、相同的用户和相同的配置在 windows 服务器 2008 上运行良好,我们正尝试从该服务器迁移。这些都是每个软件的全新安装。我们能够简单地创建 user@%,并始终连接所有 3 个测试。
补充说明:
- "localhost" 在浏览器(本地 IIS)中输入时,有时有效,有时无效。 127.0.0.1 总是工作正常。
- 没有主机条目,因为 win7+ 使用内部 dns。我们添加了 localhost 条目,它没有效果。
- IIS 一直冻结我们。这些网站在浏览器中开始 "spin",并且永远不会加载。我们必须 运行 一个 iisreset。我们无法确定为什么会发生这种情况 - 它似乎是随机的。似乎与本地主机问题有关,是吗?
如果我没记错的话,有一次我发现我需要有 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 问题是另一天的话题,我想...
我们的服务器出现了一个非常奇怪的问题。
任何用户(包括 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";
那么让我逐步介绍一下顺序。
- MySQL 用户已配置,user@% 密码为 123,在所有数据库上具有完整的服务器权限。
- PHP 脚本是 运行。前两个测试因访问 denied 而失败。最后一个成功。
- Mysql 用户重新配置:user@127.0.0.1
- 脚本运行:全部三个拒绝。
- MySQL Flush Privs
- 前两个成功。最后失败。 (有道理)
- MySQL 用户配置:user@% (步骤 1 的原件)
- 脚本运行:三个都成功了。 (万岁?没有)
- MySQL 刷新权限(and/or 服务器重启)
- 返回第 2 步。
我们无法获取 Coldfusion 或 PHP 来维持连接。它首先工作,第一个连接,当 user@127.0.0.1(在 mysql 中如此配置),但随后在 coldfusion 中失败,并且 php 无法可靠地连接,具体取决于服务重启或刷新。 PHP 确实概述了问题,如上所示。但是冷聚变的 JDBC 连接器似乎随机工作或不工作。
知道这里发生了什么吗? user@% 应该总是有效,不是吗?
- MySQL v5.5,PHP v 7,Coldfusion v11(jdbc .38 最新版)。 Windows 服务器 2012。
- my.cnf 未配置绑定地址(允许所有主机)。
- 最大连接数 = 500
- 禁用 ipv6 (OxFFFFFF)
- 防火墙已关闭。
- 相同的数据库、相同的用户和相同的配置在 windows 服务器 2008 上运行良好,我们正尝试从该服务器迁移。这些都是每个软件的全新安装。我们能够简单地创建 user@%,并始终连接所有 3 个测试。
补充说明:
- "localhost" 在浏览器(本地 IIS)中输入时,有时有效,有时无效。 127.0.0.1 总是工作正常。
- 没有主机条目,因为 win7+ 使用内部 dns。我们添加了 localhost 条目,它没有效果。
- IIS 一直冻结我们。这些网站在浏览器中开始 "spin",并且永远不会加载。我们必须 运行 一个 iisreset。我们无法确定为什么会发生这种情况 - 它似乎是随机的。似乎与本地主机问题有关,是吗?
如果我没记错的话,有一次我发现我需要有 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 问题是另一天的话题,我想...