MySQL - 在我通过 Workbench 或 CLI 连接之前拒绝访问
MySQL - access denied until I connect via Workbench or CLI
我遇到了从本地主机 PHP 站点到本地主机 MySQL 数据库的间歇性连接问题。它返回 Access Denied for 'user'@'localhost' (using password: YES)
,这是典型的错误密码。我测试了确定它没有什么特别的,我可以用root
得到它,所以我很困惑。我什至用相同的用户名和密码设置了一个 127.0.0.1
、一个 localhost
和一个 %
帐户。 None 个有效,但 root
工作得很好。这是我最大的困惑 - 'root' 工作没有问题,但这个新用户根本不工作。
我查看了 SE 和其他论坛上与 Error 1045, Access Denied
和所有变体相关的许多问题(见下文)和问题,大多数归结为拼写错误或拼写错误,或类似的东西。我已经复制并粘贴了所有代码周围的每个相关字符串,所以这不是问题。我没有匿名用户,所以这不是问题所在。没有 DNS 问题,它是本地主机,我已经尝试了它的每一次迭代。
问题来自于为我解决了问题。如果我通过 MySQL Workbench 或 CLI 使用新帐户打开与数据库的连接,网页突然可以正常工作,通过新帐户连接也没有问题。但是,如果我 运行 更改新帐户信息的脚本,即使我什么都不更改并重新加载页面,它也会再次拒绝访问,直到我通过 MySQL [= 再次打开该连接为止70=] 或 CLI。
它每次都能正常工作。我不知道发生了什么 - 帐户是否需要通过 CLI 或 Workbench 登录才能通过 PHP 使用?还是我还缺少其他东西?
PHP代码
$servername='localhost';
$username='website';
$password='password';
$database='db_1';
$conn=new mysqli($servername, $username, $password, $database);
if($conn->connect_error) die("connection failed");
MySQL 凭据创建
create user website@'localhost' identified by 'password';
grant SELECT, INSERT, DELETE on db_1.* to 'website'@'localhost';
一些没有帮助的 SO 问题:
MySQL - Access denied for user
access denied for user @ 'localhost' to database ''
"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)" from php function
编辑 1:
我正在 运行 在本地计算机上安装 WAMP 堆栈。我为端口 3306 打开了防火墙(端口 MySQL 正在侦听)。我没有使用 CPanel(我认为这就是所谓的)。而且我刚刚测试过,它不适用于 root
,直到我继续并通过 CLI 或 Workbench.
重新创建与数据库的新连接
它返回的错误也包括这个,但我从来没有遇到过这个问题,因为我之前从未尝试在其中任何一个上安装 OpenSSL:mysqli::__construct(): PHP was built without openssl extension, can't send password encrypted in [file]
。但是,一旦我通过 CLI 建立连接(没有花哨的标签或任何东西,所以我不认为我在使用 SSL)或通过 Workbench.
建立连接,这种情况就会消失
编辑 2: 兔子洞变得更深然后停止了,但我仍然对如何正确配置我的设置以避免它在 future/fix 这样更安全。解决方案(我不能把它作为我自己的,所以如果你们中的一个人想解释然后声明这个,去吧 - 我会接受它)是回到我的 MySQL 服务器和重新配置 Authentication Method
以不使用 Strong Password Encryption
而是选择 Legacy Authentication Method
。如果有人可以解释如何使我的 PHP 与较新的身份验证方法兼容(我还没有看过,但会在 post 之后看到)我将不胜感激。
解决方案是回到我的 MySQL 服务器并重新配置 Authentication Method
以不使用 Strong Password Encryption
而是选择 Legacy Authentication Method
.
我遇到了从本地主机 PHP 站点到本地主机 MySQL 数据库的间歇性连接问题。它返回 Access Denied for 'user'@'localhost' (using password: YES)
,这是典型的错误密码。我测试了确定它没有什么特别的,我可以用root
得到它,所以我很困惑。我什至用相同的用户名和密码设置了一个 127.0.0.1
、一个 localhost
和一个 %
帐户。 None 个有效,但 root
工作得很好。这是我最大的困惑 - 'root' 工作没有问题,但这个新用户根本不工作。
我查看了 SE 和其他论坛上与 Error 1045, Access Denied
和所有变体相关的许多问题(见下文)和问题,大多数归结为拼写错误或拼写错误,或类似的东西。我已经复制并粘贴了所有代码周围的每个相关字符串,所以这不是问题。我没有匿名用户,所以这不是问题所在。没有 DNS 问题,它是本地主机,我已经尝试了它的每一次迭代。
问题来自于为我解决了问题。如果我通过 MySQL Workbench 或 CLI 使用新帐户打开与数据库的连接,网页突然可以正常工作,通过新帐户连接也没有问题。但是,如果我 运行 更改新帐户信息的脚本,即使我什么都不更改并重新加载页面,它也会再次拒绝访问,直到我通过 MySQL [= 再次打开该连接为止70=] 或 CLI。
它每次都能正常工作。我不知道发生了什么 - 帐户是否需要通过 CLI 或 Workbench 登录才能通过 PHP 使用?还是我还缺少其他东西?
PHP代码
$servername='localhost';
$username='website';
$password='password';
$database='db_1';
$conn=new mysqli($servername, $username, $password, $database);
if($conn->connect_error) die("connection failed");
MySQL 凭据创建
create user website@'localhost' identified by 'password';
grant SELECT, INSERT, DELETE on db_1.* to 'website'@'localhost';
一些没有帮助的 SO 问题:
MySQL - Access denied for user
access denied for user @ 'localhost' to database ''
"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)" from php function
编辑 1:
我正在 运行 在本地计算机上安装 WAMP 堆栈。我为端口 3306 打开了防火墙(端口 MySQL 正在侦听)。我没有使用 CPanel(我认为这就是所谓的)。而且我刚刚测试过,它不适用于 root
,直到我继续并通过 CLI 或 Workbench.
它返回的错误也包括这个,但我从来没有遇到过这个问题,因为我之前从未尝试在其中任何一个上安装 OpenSSL:mysqli::__construct(): PHP was built without openssl extension, can't send password encrypted in [file]
。但是,一旦我通过 CLI 建立连接(没有花哨的标签或任何东西,所以我不认为我在使用 SSL)或通过 Workbench.
编辑 2: 兔子洞变得更深然后停止了,但我仍然对如何正确配置我的设置以避免它在 future/fix 这样更安全。解决方案(我不能把它作为我自己的,所以如果你们中的一个人想解释然后声明这个,去吧 - 我会接受它)是回到我的 MySQL 服务器和重新配置 Authentication Method
以不使用 Strong Password Encryption
而是选择 Legacy Authentication Method
。如果有人可以解释如何使我的 PHP 与较新的身份验证方法兼容(我还没有看过,但会在 post 之后看到)我将不胜感激。
解决方案是回到我的 MySQL 服务器并重新配置 Authentication Method
以不使用 Strong Password Encryption
而是选择 Legacy Authentication Method
.