无法使用旧的不安全身份验证方式连接MySQL 4.1+

13

我知道有很多问题与我的问题相同,但我希望你能帮助我找到另一个解决方案。

我们的项目使用 Symfony 2.5.10PHP 5.4.44MySQL 4.1.20

每当我尝试登录系统或进行任何涉及连接到数据库的操作(例如使用 FOS 命令添加新用户),我都会收到此错误:

SQLSTATE[HY000] [2000] mysqlnd 无法使用旧式不安全的身份验证方式连接到 MySQL 4.1+。请使用管理工具使用命令 SET PASSWORD = PASSWORD('your_existing_password') 重置密码。这将在 mysql.user 中存储新的、更安全的哈希值。如果该用户用于 PHP 5.2 或更早版本执行的其他脚本中,您可能需要从 my.cnf 文件中删除 old-passwords 标志。

我们已经尝试将 my.cnf 中的 old_passwords 设置为 0,重新启动 mysql,为 mysql 用户设置新密码并再次重新启动 mysql,但问题仍然存在。每当我们在查询窗口运行以下内容时:

SELECT user, Length(Password) FROM mysql.user;

目前使用的用户密码长度仍然显示为16个字符。即使我们已经在my.cnf文件中将old_password设置为0,查看mysql服务器变量和设置时,old passwords仍然是ON

可能出了什么问题?非常感谢您的帮助。

更新:暂时,我们删除了数据库用户的密码以便我们能够访问数据库。但我仍在寻找其他解决方案,因为我在网上找到的那些解决方案(例如在my.cnf中删除或注释掉old_passwords=1,将old_passwords设置为0并设置新密码,然后重新启动)对我没有用。

另一个更新:通常,解决此问题的方法是在mysql中将old_passwords关闭,但正如PHP文档中所述,新的mysqlnd库不会读取mysql配置文件(my.cnf/my.ini)。

这是否意味着在my.cnf中将old_passwords设置为0没有用途?我还没有找到解决此问题的方法。

我们需要升级任何已使用的平台吗?非常感谢您的帮助。


可能是一个重复的问题,参考链接:https://dev59.com/4XI_5IYBdhLWcg3wAd42 - Stafox
请参考 https://dev59.com/4XI_5IYBdhLWcg3wAd42。 - Ali Zia
你尝试过在数据库管理员中使用 SET PASSWORD = PASSWORD('your_existing_password') 吗? - Tschallacka
@MichaelDibbets 我已经尝试多次重置密码,但问题仍旧存在。每当我检查密码长度时,它总是16,即使我尝试在设置另一个密码之前运行 SET SESSION old_passwords=FALSE;,甚至修改了上面提到的 my.cnf 文件。 :( - user123
@Mihai,每当我运行SET PASSWORD = UPPER(SHA1(UNHEX(SHA1('yourpassword'))));时,它会显示SQL语法错误。 - user123
显示剩余5条评论
2个回答

4
"

在MySQL服务器5.7.6中,“SET PASSWORD”已被弃用。

对于版本低于5.7.6的服务器,应遵循以下语法:

"
SET PASSWORD [FOR user] = password_option
password_option: {
    PASSWORD('auth_string')
  | OLD_PASSWORD('auth_string')
  | 'hash_string'
}

服务器版本5.7.6及以上应遵循以下语法:

SET PASSWORD [FOR user] = password_option
password_option: {
    PASSWORD('auth_string')
  | 'auth_string'
}

请参考->http://dev.mysql.com/doc/refman/5.7/en/set-password.html

这个链接提供了有关设置MySQL密码的详细信息。

他们正在使用MySQL 4.1.20而不是MySQL 5.7.6,所以应该可以工作 ;) - tobiinformatik

2
请尝试这个解决方案:
根据解决方案,您只需要重新设置密码,并指定它以新格式保存即可。
解决方案来源:http://laravel.io/forum/04-16-2014-solving-mysqlnd-cannot-connect-to-mysql-41
mysql> SET @@session.old_passwords = 0;
Query OK, 0 rows affected (0.00 sec)
SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('existingpass');
Query OK, 1 rows affected (0.00 sec);

我尝试了这个,但输出仍然相同... SQLSTATE[HY000] [2000] mysqlnd 无法使用旧的不安全身份验证连接到 MySQL 4.1+... - user123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接