首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

解決 MySQL 5.6 升級後「old authentication protocol」連線失敗問題

     編輯:MySQL 綜合教學

將開發機 MySQL 升級至 5.6 後,連線舊版資料庫即報錯:

Warning: mysql_connect(): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

根本原因

MySQL 5.6 預設開啟 secure_auth,要求客戶端使用新版密碼雜湊格式 (4.1.1+)。舊版伺服器仍使用 pre-4.1 短雜湊,導致協議不匹配而被拒絕。

三種解決方案

方案一:升級伺服器端密碼格式(推薦,最徹底)

在舊版 MySQL 上為受影響帳號重設密碼,自動轉為新雜湊:

SET PASSWORD FOR 'root'@'%' = PASSWORD('new_password');
FLUSH PRIVILEGES;

方案二:客戶端關閉 secure_auth(快速暫時可用)

  • 命令列:mysql -h host -u user -p --secure-auth=0
  • PHP php.ini:mysql.secure_auth = Off (PHP 5.6+ 已棄用)
  • PDO 連線字串:PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false (視驅動版本而定)

方案三:伺服器端關閉 secure_auth(不建議生產環境)

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

secure_auth=0

重啟 MySQL 後生效,但會降低安全性,僅供過渡期使用。

最佳實踐建議

  1. 優先採用方案一,統一密碼格式,符合安全合規。
  2. 若無法立即升級舊庫,採用方案二於應用層配置,並制定遷移時間表。
  3. 長期應淘汰 pre-4.1 密碼雜湊,避免相容性與安全雙重風險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved