我在从本地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,我已经尝试过每次迭代。
问题来自为我解决问题的方式。如果我通过MySQL Workbench或CLI使用新帐户打开与数据库的连接,则该网页突然可以正常工作,通过新帐户进行连接也没有问题。但是,如果我运行任何更改新帐户信息的脚本,即使不进行任何更改并重新加载页面,它将再次拒绝访问,直到我通过MySQL 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与较新的身份验证方法兼容(我还没有看过,但是在发布此内容后会),我将不胜感激。
答案 0 :(得分:0)
解决方案是返回我的MySQL服务器并重新配置Authentication Method
,使其不使用Strong Password Encryption
,而是选择Legacy Authentication Method
。