首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 MySQL「Client does not support authentication protocol」錯誤

     編輯:MySQL 資料庫相關知識

當使用舊版 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 已移除。長期仍建議升級客戶端。

方案三:讓伺服器使用舊式雜湊演算法(不建議生產環境)

  1. 啟動 mysqld 時加入 --old-passwords 參數。
  2. 找出目前使用長密碼的帳號:
    SELECT Host, User, Password FROM mysql.user WHERE LENGTH(Password) > 16;
  3. 為這些帳號重新指派舊式密碼(同方案二的 SQL 指令)。

此法會降低整體安全性,僅作為過渡臨時方案。

補充說明

  • MySQL 8.0 預設驗證插件為 caching_sha2_password,若舊版客戶端(含 PHP mysqlnd 舊版)連線失敗,可建立帳號時指定 IDENTIFIED WITH mysql_native_password BY 'password'。
  • PHP 專案若使用 mysqli 或 PDO_MySQL,請確認 PHP 版本與 mysqlnd 版本支援目標 MySQL 版本的驗證協定。

徹底解決之道仍是保持客戶端與伺服器版本相容,定期更新驅動程式與資料庫伺服器,確保安全與效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved