一尘不染

无法使用旧的身份验证连接到MySQL 4.1+

mysql

我试图连接到http://bluesql.net上的mySQL数据库,但是当我尝试连接时,出现此错误:

Connect Error (2000) mysqlnd cannot connect to MySQL 4.1+ using old authentication

我已经研究过了,它与MySQL 4.1之前使用的一些旧密码方案有关。较新的版本可以选择使用旧密码,我已阅读过此密码可能会导致此问题。

我正在运行php 5.3,并与mySQLi(新的mysqli(…))连接。我希望我可以在代码中做一些事情以连接到bluesql.net上的数据库-
显然我不控制如何设置他们的数据库。降级php版本不是一种选择。

谁有想法?


阅读 338

收藏
2020-05-17

共1个答案

一尘不染

编辑:仅当您在控制MySQL服务器时,这才适用…如果您不看看Mysql密码哈希方法old vs
new

首先用SQL查询检查

SHOW VARIABLES LIKE 'old_passwords'

(在MySQL命令行客户端,HeidiSQL或任何您喜欢的前端中)默认情况下是否将服务器设置为使用旧密码架构。如果返回,则old_passwords,Off您恰好在user表中有旧密码条目。MySQL服务器将对这些帐户使用旧的身份验证例程。您只需为该帐户设置一个新密码,就会使用新例程。

您可以查看mysql.user表格(使用有权访问该表格的帐户)来检查将使用哪个例程

SELECT `User`, `Host`, Length(`Password`) FROM mysql.user

对于使用旧密码的帐户,这将返回 16 ;对于使用新密码的帐户,它将返回 41 (对于完全没有密码的帐户,将返回0;您可能还需要注意这些)。
使用MySQL前端的用户管理工具(如果有)或

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges;

(替换UserHost使用您从上一个查询中获得的值。)然后再次检查密码的长度。现在应该是 41,
并且您的客户端(例如mysqlnd)应该能够连接到服务器。

另请参见MySQL文档: http://dev.mysql.com/doc/refman/5.0/zh-CN/old-
client.html
http://dev.mysql.com/doc/refman/5.0/zh-CN/password -hashing.html
* http://dev.mysql.com/doc/refman/5.0/en/set-password.html

2020-05-17