一尘不染

PHP 5.4 PDO无法使用旧的不安全身份验证连接到MySQL 4.1+

mysql

我知道有很多类似的问题,实际上我已经阅读了全部(9)。

但是,它们都不能解决我的问题。

我有一个共享主机包(最低要求)。我的软件包中包括域名,以及托管MySQL服务器的单独IP地址。对于开发,我使用http://localhost/PHP
5.4的开发服务器,并使用托管包中提供的MySQL服务器。

该问题仅在我的PC上出现,因为我已经安装了PHP 5.4,但是我的Web主机已经安装了PHP 5.2.17,并且不会升级。MySQL服务器在MySQL
5.1.50上。

幸运的是,phpMyAdmin具有内置的“更改密码”功能。

phpMyAdmin中有两个用于更改密码的哈希选项:

  • MySQL 4.1以上
  • 兼容MySQL 4.0

我使用MySQL 4.1+选项更改了密码,并确认更新成功。

配置文件已更新。 SET PASSWORD = PASSWORD( '***' )

但是,当我执行此查询时:

SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));

它告诉我密码长度仍为16。输出:

1     1     16

因此问题仍然存在。

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

使用phpMyAdmin中的DBO用户登录时,我也尝试过执行以下查询:

SET SESSION old_passwords=0; 
[phpMyAdmin reloads to the home screen, but the value remains = 1]

SET GLOBAL old_passwords = 0;
#1227 - Access denied; you need the SUPER privilege for this operation

FLUSH PRIVILEGES;
#1227 - Access denied; you need the RELOAD privilege for this operation

这与在Webhost的菜单中设置DBO用户的说明相矛盾:

数据库所有者
创建新数据库时,需要指定数据库所有者(DBO)用户,该用户将具有
对数据库的完全管理员访问权限。

这是我必须处理的Web主机吗?还是可以由我的DBO用户解决?否则可以绕过PHP吗?(因为它适用于PHP 5.2.17,但不适用于PHP 5.4)


阅读 258

收藏
2020-05-17

共1个答案

一尘不染

解决了!

虽然SET SESSION old_passwords=0;在phpMyAdmin中不起作用。

我下载了MySQL GUI工具,并使用MySQL查询浏览器在非DBO用户上执行了相同的命令:

SET SESSION old_passwords = 0;

SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));

现在返回:

1      0      41

所以我只是更改了密码:

SET PASSWORD = PASSWORD('my_old_password')

现在,PHP 5.4 PDO通过该用户连接到数据库!

2020-05-17