无法使用旧的不安全身份验证

时间:2015-10-22 04:04:14

标签: php mysql symfony password-hash mysqlnd

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

我们的项目使用 Symfony 2.5.10 PHP 5.4.44 MySQL 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设置为0,重新启动mysql,为mysql用户设置新密码并重新启动mysql但仍然相同。每当我们在查询窗口中运行它时:

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

它仍然显示16为我们正在使用的用户的密码长度。并且在检查mysql服务器变量和设置时,old passwords ON (即使我们已经在my.cnf中将old_password设置为0)。

这可能有什么问题?我非常感谢你的帮助。

更新:与此同时,我们删除了db用户的密码,以便我们能够访问数据库。但我仍然在寻找其他解决方案,因为我在网上找到的那些解决方案(比如在my.cnf中删除或评论old_passwords=1,将old_passwords设置为0并设置新密码然后重启)对我来说不起作用

另一个更新:通常,此问题的解决方案是在mysql中设置old_passwords但是,如PHP documentation中所述,

  

新的mysqlnd库不读取mysql配置文件(my.cnf / my.ini)。

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

我们是否需要在所使用的任何平台上进行升级?在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

"设置密码"在MySQL服务器5.7.6中已弃用。

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

答案 1 :(得分: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);
相关问题