错误:mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1 +

2022-08-30 16:34:29

我收到以下错误:

数据库连接失败:mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1 +。请使用管理工具通过命令 重置密码。SET PASSWORD = PASSWORD('your_existing_password')

这将在 中存储一个新的、更安全的哈希值。如果此用户在 PHP 5.2 或更早版本执行的其他脚本中使用,则可能需要从文件中删除旧密码标志mysql.usermy.cnf

我在本地计算机上使用 PHP 5.3.8 和 MySQL 5.5.16,并且我的主机(媒体庙宇)运行的是 PHP 5.3 MySQL 5.0.51a。实时服务器上的版本比我计算机上的版本旧。

如何修复此错误并从本地计算机连接到MySQL?

我知道有与此类似的帖子,但我已经尝试了所有帖子,并且没有一个工作。


答案 1
  • 在 my.cnf 中删除或注释 old_passwords = 1

重新启动 MySQL。如果不这样做,MySQL将继续使用旧的密码格式,这意味着您无法使用内置的PASSWORD()哈希函数升级密码。

旧密码哈希为 16 个字符,新密码哈希为 41 个字符。

  • 连接到数据库,并运行以下查询:

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

这将向您显示哪些密码采用旧格式,例如:

+----------+--------------------+
| user     | Length(`Password`) |
+----------+--------------------+
| root     |                 41 |
| root     |                 16 |
| user2    |                 16 |
| user2    |                 16 |
+----------+--------------------+

请注意,此处每个用户可以有多个行(每个不同的主机规范对应一行)。

若要更新每个用户的密码,请运行以下命令:

UPDATE mysql.user SET Password = PASSWORD('password') WHERE user = 'username';

最后,刷新权限:

FLUSH PRIVILEGES;

来源:如何在 PHP5.3 上修复“mysqlnd 无法使用旧身份验证连接到 MySQL 4.1+”


答案 2

我遇到了一个问题,默认情况下服务器启用了旧密码,因此为“some-user'@'%'=PASSWORD”('XXXX')设置一个简单的密码;不会工作(由于旧软件和遗产的原因,我不会进入...)

溶液:

SET old_passwords = 0;
SET PASSWORD FOR 'some-user'@'%' = PASSWORD ('XXXX');
FLUSH PRIVILEGES;

详:

以登录用户身份执行此操作

SET Password = PASSWORD('password')

根本不起作用

例如,可在此处测试

SHOW CREATE TABLE `mysql`.`user`;

密码不会转移到

| HOST | USER | PASS |

旧密码

| % | some-user | 7fa559aa33d844b4 |

我想要什么,例如新密码

| % | some-user | *CF04AECA892176E6C0C8206F965C03374D12F93E |

所以我查找了旧密码的变量

SHOW VARIABLES;

...
old_passwords = ON
...

所以基本上我必须首先将mysql服务器var设置为old_password= OFF,例如这对我有用

SET old_passwords = 0;
SET PASSWORD FOR 'some-user'@'%' = PASSWORD ('XXXX');
FLUSH PRIVILEGES;

推荐