gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-29 00:18:42 27 4
gpt4 key购买 nike

我知道有很多类似的问题,事实上我已经阅读了所有 (9) 个问题。

但是,他们都没有解决我的问题。

我有一个共享主机包(最低)。我的包裹中包含的是域名和托管 MySQL 服务器的单独 IP 地址。对于开发,我将 http://localhost/ 与 PHP 5.4 的开发服务器一起使用,并使用托管包中的 MySQL 服务器。

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

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

phpMyAdmin 中有两个用于更改密码的散列选项:

  • MySQL 4.1+
  • MySQL 4.0 兼容

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

The profile has been updated. SET PASSWORD = PASSWORD( '***' )

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

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

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

1     1     16

所以问题仍然存在。

Could not connect to database. SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file

在 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 用户设置菜单中的说明相矛盾:

Database Owner
When you create a new database, you need to specify a Database Owner (DBO) User, which will have
full administrator access to the database.

这是我必须与我的虚拟主机商合作的事情吗?还是我的 DBO 用户可以解决?否则这可以在 PHP 中绕过吗? (因为它适用于 PHP 5.2.17 但不适用于 PHP 5.4)

最佳答案

已解决!

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

我下载了MySQL GUI Tools并使用 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 使用该用户连接到数据库!

关于PHP 5.4 PDO 无法使用旧的不安全身份验证连接到 MySQL 4.1+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10420831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com