MySQL-访问被拒绝,直到我通过Workbench或CLI连接

时间:2018-09-28 19:49:17

标签: php mysql localhost mysql-workbench mysql-error-1045

我在从本地PHP网站到本地MySQL数据库的间歇性连接问题中遇到了问题。它给了我Access Denied for 'user'@'localhost' (using password: YES)的密码,就像输入错误密码一样。我进行了测试,以确保它没有什么特别之处,并且可以通过root来获得它,因此感到困惑。我什至用相同的用户名和密码设置了一个127.0.0.1,一个localhost和一个%帐户。它们都不起作用,但是root很好。这是我最大的困惑-“ root”可以正常工作,但是这个新用户根本无法工作。

我浏览了SE和其他论坛上与Error 1045, Access Denied及其所有变体有关的许多问题(请参阅下文)和问题,并且大多数归结为拼写错误或错字,或者这种性质的东西。我已经在所有代码中复制并粘贴了每个相关的字符串,所以这不是问题。我没有匿名用户,所以这不是问题。没有DNS问题,它是localhost,我已经尝试过每次迭代。

问题来自为我解决问题的方式。如果我通过My​​SQL Workbench或CLI使用新帐户打开与数据库的连接,则该网页突然可以正常工作,通过新帐户进行连接也没有问题。但是,如果我运行任何更改新帐户信息的脚本,即使不进行任何更改并重新加载页面,它将再次拒绝访问,直到我通过My​​SQL Workbench或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(无论如何我都认为这是它的意思)。而且我刚刚进行了测试,并且直到我继续通过CLI或Workbench重新创建与数据库的新连接后,它都无法与root一起使用。

它返回的错误也包括此错误,但是我从未遇到过这个错误,因为我从未尝试在以下任一版本上安装OpenSSL:mysqli::__construct(): PHP was built without openssl extension, can't send password encrypted in [file]。但是,只要我通过CLI(没有奇特的标签或其他任何东西,所以我不认为我在使用SSL)或通过Workbench建立连接,这种情况就会消失。

编辑2:兔子洞变深了,然后停了下来,但是我仍然对如何正确配置我的设置感到困惑,以免将来再使用它/以使其更安全。解决方案(我不能自己提出,所以如果你们中的一个想要解释然后声称这一点,那就继续吧-我会接受的)是回到我的MySQL服务器并重新配置{{ 1}}不使用Authentication Method,而是选择Strong Password Encryption。如果有人可以解释如何使我的PHP与较新的身份验证方法兼容(我还没有看过,但是在发布此内容后会),我将不胜感激。

1 个答案:

答案 0 :(得分:0)

解决方案是返回我的MySQL服务器并重新配置Authentication Method,使其不使用Strong Password Encryption,而是选择Legacy Authentication Method