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

MySQL 5.0/8.0 密碼演算法升級導致連線失效:快速修復指南

     編輯:MySQL 資料庫相關知識

現象重現

升級至 MySQL 5.0.1 或 8.0 後,舊版 PHP/MySQL 擴展(php_mysql.dll)連線報錯:

Client does not support authentication protocol requested by server

根本原因

MySQL 4.1 引入 41 位元組 SHA1 雜湊(caching_sha2_password 為 8.0 預設),舊驅動僅支援 16 位元組 mysql_old_password。

立即修復:將受影響帳號改回舊式雜湊

mysql -u root -p
-- MySQL 5.x / 8.0 通用
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpass';
-- 或指定舊式(不推薦長期使用)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_old_password BY 'newpass';
mysql> FLUSH PRIVILEGES;

說明:mysql_native_password 為 41 位元組 SHA1,相容 PHP 5.3+ mysqli、PDO 及多數現代驅動;mysql_old_password 為 16 位元組,僅相容極舊驅動。

替代方案:升級應用端驅動(根治)

語言/平台舊驅動新驅動(支援 caching_sha2_password)
PHPext/mysql (php_mysql.dll)mysqli、PDO_MySQL (PHP 5.3+)
JavaConnector/J 3.x/5.0Connector/J 8.0+
PythonMySQLdbmysqlclient / PyMySQL
Node.jsmysql (舊版)mysql2 / @mysql/xdevapi
.NETMySQL Connector/NET 6.xMySQL Connector/NET 8.0+

伺服端相容設定(過渡期使用)

[mysqld]
default-authentication-plugin=mysql_native_password
# 或針對特定帳號
ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

MySQL 8.0 預設 caching_sha2_password,設定上述參數可全域回退至 mysql_native_password,賜予遷移緩衝期。

驗證步驟

  1. 修改密碼/驅動後,重啟應用服務;
  2. 以命令列測試:mysql -u root -p -h 127.0.0.1;
  3. 檢查應用日誌無認證錯誤;
  4. 納入變更管理,排定驅動全面升級時程。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved