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

MySQL 密碼演算法變更導致「Client does not support authentication protocol」錯誤完整解決方案

     編輯:MySQL 資料庫相關知識

錯誤成因

MySQL 4.1+ 採用新式雜湊演算法(mysql_native_password,41 位元組),舊版客戶端(PHP < 5.3、舊 JDBC/ODBC、舊 libmysqlclient)僅支援舊式 16 位元組雜湊,導致握手失敗:

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

解決方案對照表

方案適用場景操作步驟
升級客戶端驅動 可控制應用程式環境 PHP 改用 mysqli / PDO_MySQL(PHP 5.3+);Java 升級 Connector/J 5.1+;Python 升級 mysqlclient/PyMySQL
將帳號改回舊式密碼 無法升級客戶端(舊系統維護) 見下方詳細步驟
伺服端啟用 old_passwords 全庫相容舊客戶端 SET GLOBAL old_passwords=1;(僅影響新設定密碼)

方案二詳細步驟:將特定帳號密碼改為舊式雜湊

mysql -u root -p
mysql> -- MySQL 5.7.6+ / 8.0
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_old_password BY 'newpass';
mysql> FLUSH PRIVILEGES;

-- MySQL 5.7.6 以前
mysql> SET PASSWORD FOR 'root'@'localhost' = OLD_PASSWORD('newpass');
mysql> FLUSH PRIVILEGES;

-- 通用 UPDATE 寫法(不推薦,易版本不相容)
mysql> UPDATE mysql.user SET Password=OLD_PASSWORD('newpass') WHERE User='root' AND Host='localhost';
mysql> FLUSH PRIVILEGES;

驗證與後續建議

  1. 重啟應用測試連線;
  2. 若使用 phpMyAdmin,同步更新 config.inc.php 中的密碼;
  3. 長期對策:規劃升級客戶端驅動,舊式雜湊(mysql_old_password)已於 MySQL 8.0 移除,存在安全風險(易遭暴力破解)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved