Php MySQL本地主机访问被拒绝,直到刷新
我们的服务器出现了一个非常奇怪的问题 任何用户(包括root用户)都无法访问本地系统上的mysql,并且在刷新之间进行交换 我们正在使用一个简单的php脚本来测试它Php MySQL本地主机访问被拒绝,直到刷新,php,mysql,coldfusion,localhost,access-denied,Php,Mysql,Coldfusion,Localhost,Access Denied,我们的服务器出现了一个非常奇怪的问题 任何用户(包括root用户)都无法访问本地系统上的mysql,并且在刷新之间进行交换 我们正在使用一个简单的php脚本来测试它 $username = "test"; $password = "pass123"; $conn = new mysqli("localhost", $username, $password); if ($conn->connect_error) {echo "[localhost] Connection failed: "
$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";
$username=“test”;
$password=“pass123”;
$conn=newmysqli(“localhost”,$username,$password);
如果($conn->connect_error){echo“[localhost]连接失败:“.$conn->connect_error;}否则echo“[localhost]连接成功”;
回声“
”;
$conn=newmysqli(“127.0.0.1”,$username,$password);
如果($conn->connect_error){echo“[127.0.0.1]连接失败:“..$conn->connect_error;}否则echo”[127.0.0.1]连接成功”;
回声“
”;
$conn=newmysqli(“192.168.1.2”,$username,$password);
如果($conn->connect_error){echo“[192.168.1.2]连接失败:“..$conn->connect_error;}否则echo”[192.168.1.2]连接成功”;
让我带你看一下这个序列
- MySQLV5.5、PHPV7、Coldfusion v11(jdbc.38最新版本)。Windows Server 2012李>
- my.cnf未配置绑定地址(允许所有主机)
- 最大连接数=500
- 已禁用ipv6(OxFFFFFF)
- 防火墙关闭了
- 相同的数据库、相同的用户和相同的配置在我们正试图从中迁移的windows server 2008上运行良好。这些都是每个软件的新安装。我们能够简单地创建用户@%,并在所有3个测试中随时连接
- 在浏览器(本地IIS)中键入“localhost”时,有时有效,有时无效。127.0.0.1始终运行良好
- 没有主机条目,因为win7+使用内部dns。我们添加了localhost条目,但没有效果
- IIS一直冻结在我们身上。这些网站开始在浏览器中“旋转”,并且从不加载。我们必须进行一次调查。我们无法确定为什么会发生这种情况——这似乎是随机的。似乎与本地主机问题有关,是吗
user@localhost
user,然后继续
这是因为%实际上与UNIX套接字上的本地连接不匹配,而是user@localhost
将使用记录
这个问题可能会有帮助:
记住,对用户表的任何更改都需要
刷新权限才能生效。找到了答案,抱歉,伙计们,应该再研究一会儿。
有时我们通过谈论它来找到正确的关键词,即橡胶鸭效应
基本上,很明显,mysql默认包含一个空白用户记录,主机为localhost,它取代了任何用户@%。导致这种行为。
删除用户,问题就解决了。现在我的防火墙可以打开了。。。哇
我提到的IIS问题是另一天的话题,我想…100%正确,我们试图避免重复用户,而在mysql中只有一个用户。让我们的防火墙和vpn处理登录访问点的安全。是的,不幸的是,我认为如果您执行本地连接,您将无法绕过这一点。还要注意(我认为)localhost和127.0.0.1(一个是UNIX套接字,另一个是环回接口)之间存在差异,这是一个常见的误解<代码>“用户”@“%”
匹配所有内容,除非该用户存在更具体的主机值。。。或者,您点击了空用户名用户,因为您没有正确保护初始安装。解释不太正确。当用户尝试连接到MySQL服务器时,MySQL会按特定顺序查看MySQL.user表中的行。您是对的,MySQL在任何“用户”@“%”之前排序“@”localhost“,这将首先进行检查。在MySQL中,“localhost”的主机值不是环回IP 127.0.0.1的同义词。这根本不是IP连接。它是本地服务器上的连接,通过一个不是IP套接字的套接字。因此,用户表中的此项仅影响本地服务器上的客户端,而不通过IP连接。对msyql.user、mysql.db等进行的任何DML(插入/更新/删除)更改都会导致表无效,直到刷新权限导致mysql服务器读取表并重新填充内存结构。如果权限更改是通过GRANT和REVOKE语句进行的,那么这些更改将在不需要执行FLUSH PRIVES语句的情况下生效。这本书应该是必读的,它很重要。不确定您是否能够改进/编辑我的答案,您更愿意在需要评分的地方评分。MySQL中的用户由用户和主机标识。可以有多行