我知道有很多类似的问题,实际上我已经阅读了所有(9)个问题。
然而,它们中没有一个能解决我的问题。
我有一个共享主机套餐(最低配置)。我的套餐包括域名和一个单独的IP地址,MySQL服务器托管在这个地址上。为了开发,我正在使用PHP 5.4的开发服务器http://localhost/
,并且我正在使用我在主机套餐中获得的MySQL服务器。
问题只出现在我的个人电脑上,因为我安装了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。输出:
Tells me the password length is still 16. Output:
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
这与网络主机设置DBO用户菜单中所述的相矛盾:
数据库所有者
当您创建一个新的数据库时,需要指定一个数据库所有者(DBO)用户,该用户将具有对数据库的完全管理员访问权限。
这是我必须要向我的网络主机提出的问题吗?还是可以由我的DBO用户解决?否则,是否可以在PHP中绕过此问题?(因为它适用于PHP 5.2.17但不适用于PHP 5.4)