當使用舊版 MySQL 客戶端(如 MySQL 4.0 以前的函式庫)連線至 MySQL 4.1 或更新版本的伺服器時,常會遇到以下錯誤:
Client does not support authentication protocol requested by server; consider upgrading MySQL client
MySQL 4.1 引入新的密碼雜湊演算法(41 位元組),與舊版 16 位元組的預 4.1 格式不相容。舊版客戶端無法理解新的驗證協定,導致連線失敗。
將所有連線的應用程式、驅動程式(JDBC、ODBC、PHP mysqli、Python MySQLdb 等)升級至支援 MySQL 4.1.1+ 協定的版本。這是最根本、最安全的做法。
若無法立即升級客戶端,可為需使用舊版客戶端的帳號設定預 4.1 格式密碼:
-- 方法 A:使用 SET PASSWORD
SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');
-- 方法 B:使用 UPDATE 直接修改 user 表
UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
WHERE Host = 'some_host' AND User = 'some_user';
FLUSH PRIVILEGES;
注意:MySQL 5.7 起 Password 欄位更名為 authentication_string,且 OLD_PASSWORD() 函數在 MySQL 8.0 已移除。長期仍建議升級客戶端。
mysqld 時加入 --old-passwords 參數。SELECT Host, User, Password FROM mysql.user WHERE LENGTH(Password) > 16;
此法會降低整體安全性,僅作為過渡臨時方案。
caching_sha2_password,若舊版客戶端(含 PHP mysqlnd 舊版)連線失敗,可建立帳號時指定 IDENTIFIED WITH mysql_native_password BY 'password'。mysqli 或 PDO_MySQL,請確認 PHP 版本與 mysqlnd 版本支援目標 MySQL 版本的驗證協定。徹底解決之道仍是保持客戶端與伺服器版本相容,定期更新驅動程式與資料庫伺服器,確保安全與效能。