我继承了一台运行着石器时代 XAMPP 安装程序的 Windows 2k3 服务器。我需要升级 PHP 以便升级到 MediaWiki,以便安装新的 MediaWiki 扩展(以便编写一些文档,以便完成我的工作,以便获得报酬……你懂的)。
但是...安装新版本的 PHP 会导致 PHP 的 MySQL 库拒绝使用 MySQL 的“旧式”152 位密码进行通信。理论上这不是问题。MySQL 安装是 4.1 之后的版本,因此它应该具有将用户密码从 152 位升级到 328 位的功能(多么奇怪的哈希算法...)。
我运行了以下命令:
SET PASSWORD = PASSWORD('foo');
在 MySQL 上但查询:
SELECT user, password FROM mysql.user;
返回的密码和我刚开始使用的密码一样——152 位。现在……我猜你会想“啊哈!旧密码打开了!”。不幸的是,它没有打开——我在配置中禁用了它(明确将其设置为 0),再三确认我对该配置文件有绝对引用,并确保服务未使用 --old-passwords 标志。每次操作后都会重置服务。
所以我转到另一个系统并在那里生成 328 位哈希,并将哈希复制到第一个 MySQL 实例。不幸的是,这也没有用(我确实记得刷新权限)。
应用程序错误是:
“'mysqlnd 无法使用旧的不安全身份验证连接到 MySQL 4.1+。请使用管理工具 [...]
我还有什么办法可以让 PHP 识别 MySQL 未使用“旧的不安全身份验证”?MySQL 似乎卡在“旧密码”模式,我无法摆脱它。
答案1
已修复。只有上帝知道 mysql.user 表的“密码”列是 char(16) 的原因。将其设置为 char(41),将另一个数据库生成的哈希放入其中,一切就绪了。