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

解決 MySQL 4.1+「Client does not support authentication protocol」連線錯誤

     編輯:MySQL 資料庫相關知識

錯誤現象

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

根本原因

MySQL 4.1 採用新的雙重 SHA1 密碼雜湊演算法 (PASSWORD() 回傳 41 位元組雜湊),舊版客戶端 (4.0 及之前) 僅支援舊 16 位元組雜湊,導致認證協定不匹配。

解決方案:讓伺服器接受舊式密碼雜湊

方法一:SET PASSWORD (單一帳號)

mysql> SET PASSWORD FOR 'user'@'host' = OLD_PASSWORD('new_password');

方法二:UPDATE user 表 (批量/腳本)

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('new_password')
    -> WHERE Host = 'host' AND User = 'user';
mysql> FLUSH PRIVILEGES;

方法三:伺服器啟動參數 (全域相容)

在 my.cnf [mysqld] 區段加入:

old_passwords = 1

重啟 MySQL 後,PASSWORD() 函數將回傳舊式 16 位元組雜湊,所有新建/修改密碼自動相容舊客戶端。

驗證修復

shell> mysql -u user -p
Enter password: ********
Welcome to the MySQL monitor...

版本對照表

MySQL 版本PASSWORD() 輸出相容客戶端
4.0 及之前16 位元組 (舊式)舊客戶端
4.1+ (預設)41 位元組 (新式, * + 40 hex)新客戶端 (4.1+)
4.1+ (old_passwords=1)16 位元組 (舊式)新舊皆可

最佳實務建議

  1. 根本解決: 升級客戶端程式庫 (PHP mysqli/PDO、Java Connector/J、Python MySQLdb 等) 至支援新認證協定的版本。
  2. 過渡方案: 使用 OLD_PASSWORD() 或 old_passwords=1 維持相容。
  3. 安全性: 新式雜湊安全性較高,長期應規劃全面升級客戶端。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved