MySQL 4.1引入新式密碼雜湊演算法(41位元組),不相容於4.1之前版本使用的舊式雜湊(16位元組)。當舊版客戶端(含舊版PHP mysql擴展)連線新版伺服器(4.1+)時,會報錯:
Client does not support authentication protocol requested by server;
consider upgrading MySQL client.
libmysqlclient)mysqli或PDO_MySQL擴展(原生支援新協議)-- 方法一:SET PASSWORD(推薦)
SET PASSWORD FOR 'legacy_user'@'%' = OLD_PASSWORD('newpass');
-- 方法二:UPDATE + FLUSH PRIVILEGES
UPDATE mysql.user SET Password = OLD_PASSWORD('newpass')
WHERE User = 'legacy_user' AND Host = '%';
FLUSH PRIVILEGES;
注意:MySQL無法反推原始密碼,必須重新設定新密碼。
[mysqld]
old_passwords=1
啟用後,PASSWORD()函數產生舊式雜湊。需將現有長密碼帳號轉換:
-- 找出使用新式雜湊的帳號(密碼長度>16)
SELECT Host, User, Password FROM mysql.user WHERE LENGTH(Password) > 16;
-- 逐一轉換為舊式雜湊
SET PASSWORD FOR 'user'@'host' = OLD_PASSWORD('newpass');
| PHP擴展 | MySQL 4.1+支援 | 備註 |
|---|---|---|
mysql(舊版) | ❌ 不支援新協議 | 需配合方案三或四 |
mysqli(PHP 5+) | ✅ 完整支援 | 推薦使用,功能更豐富 |
PDO_MySQL | ✅ 完整支援 | 資料庫抽象層首選 |
mysqli或PDO,拒絕舊版mysql擴展old_passwords=1,新式雜湊(SHA-1基礎)安全性顯著優於舊式validate_password外掛強制密碼複雜度、定期輪換