Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL本地主机访问被拒绝,直到刷新_Php_Mysql_Coldfusion_Localhost_Access Denied - Fatal编程技术网

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

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: "

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

任何用户(包括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";
$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]连接成功”;
让我带你看一下这个序列

  • MySQL用户配置了pass123,user@%,在所有数据库上都有完整的服务器权限
  • PHP脚本正在运行。前两次测试失败,访问被拒绝。最后一个成功
  • Mysql用户已重新配置:user@127.0.0.1
  • 脚本运行:所有三个都被拒绝
  • MySQLFlushPrivs
  • 前两个成功。最后一个失败了。(有道理)
  • MySQL用户配置:User@%(步骤1的原件)
  • 脚本运行:所有三个都成功。(万岁?不)
  • MySQL刷新权限(和/或服务器重新启动)
  • 回到步骤2
  • 我们无法使用Coldfusion或PHP来维护连接。它首先工作,第一次连接,当user@127.0.0.1(在mysql中是这样配置的),但随后在coldfusion中失败,php无法依靠服务重启或刷新进行可靠连接。 PHP确实概述了这个问题,如上所示。但是用于coldfusion的JDBC连接器似乎只是随机地工作或不工作

    你知道这里发生了什么吗?用户@%应该一直工作,不是吗


    • 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中的用户由用户和主机标识。可以有多行