我知道有很多问题和我一样关心,但我希望你能帮助我找到另一个解决方案。
我们的项目使用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 标志
我们已经尝试设置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 用户的密码,以便我们能够访问数据库。但是我仍在寻找其他解决方案,因为我在网上找到的那些解决方案(例如old_passwords=1
在 my.cnf 中删除或注释掉,将 old_passwords 设置为 0 并设置新密码然后重新启动)对我不起作用。
另一个更新:通常,这个问题的解决方案是old_passwords
在 mysql 中启动,但是,如PHP 文档中所述,
新的 mysqlnd 库不读取 mysql 配置文件 (my.cnf/my.ini)。
那么这是否意味着设置old_passwords
为 in 0 inmy.cnf
没有用?我还没有想出解决这个问题的办法。
我们需要升级使用的任何平台吗?在此先感谢您的帮助。