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

解決 MySQL「客戶端不支援認證協定」錯誤:舊版驅動相容三大方案

     編輯:MySQL 資料庫相關知識

錯誤現象

Client does not support authentication protocol requested by server; consider upgrading MySQL client

MySQL 4.1+ 採用雙倍長度密碼雜湊(41 位元組),舊版客戶端(4.0.x、舊 PHP mysql 擴充)僅支援 16 位元組舊格式,導致連線失敗。

三大解決方案

方案一:升級客戶端驅動(推薦)

  • MySQL Connector/J、Connector/NET、Connector/ODBC 升級至 4.1.1+。
  • PHP 專案:改用 mysqli 或 PDO_MySQL(PHP 5.0+ 內建),原生支援新協定。

方案二:為舊客戶端建立舊格式密碼帳號

-- 建立專用帳號給舊客戶端
CREATE USER 'legacy_app'@'%' IDENTIFIED BY 'password';
-- 強制使用舊雜湊
SET SESSION old_passwords = 1;
UPDATE mysql.user SET Password = OLD_PASSWORD('password') WHERE User = 'legacy_app';
FLUSH PRIVILEGES;

方案三:伺服器端全域啟用舊密碼雜湊(不推薦,降低安全性)

  1. my.cnf [mysqld] 區段加入:
    old_passwords = 1
  2. 重啟服務。
  3. 將所有長密碼帳號轉回舊格式:
    SELECT Host, User FROM mysql.user WHERE LENGTH(Password) > 16;
    逐一執行 SET PASSWORD FOR 'user'@'host' = OLD_PASSWORD('newpwd');

PHP 專案特別說明

驗證修復

# 新客戶端連線
mysql -u new_user -p -h server_ip

# 舊客戶端連線(若採方案二)
mysql -u legacy_app -p -h server_ip --secure-auth=0

安全性提醒

  • 舊雜湊演算法(OLD_PASSWORD())強度極低,易遭暴力破解。
  • 生產環境務必優先升級客戶端,避免降級伺服器安全基線。
  • 若必須共存,使用防火牆限制舊帳號來源 IP,並定期輪換密碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
擴充PHP 版本支援新協定建議
mysql (舊)< 5.3否棄用,勿用於新專案
mysqli≥ 5.0是首選程序式/物件導向介面
PDO_MySQL≥ 5.1是資料庫抽象層首選