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

解決 MySQL 5.6 連接舊版報錯:Authentication protocol refused (secure_auth)

     編輯:MySQL 資料庫相關知識

升級開發機 MySQL 至 5.6 後,連接舊版服務器報錯:

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

根因

舊版服務器仍使用 pre-4.1 密碼雜湊格式(16 字元十六進制),而 5.6 客戶端預設啟用 secure_auth,拒絕不安全的舊格式認證。

三種解決方案

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

在舊版服務器執行:

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

PASSWORD() 會生成新版 41 字元雜湊,兼容 secure_auth。

方案二:客戶端關閉 secure_auth(臨時繞過)

命令行連接時加參數:

mysql -h 10.51.1.11 -P 3308 -uroot --secure-auth=off

PHP 應用可在 php.ini 設定:

mysqlnd.secure_auth = Off

方案三:服務端啟用 secure_auth(不建議,舊版可能不支持)

在舊版 my.cnf 加 secure-auth=1 並重啟,但舊版本可能無此選項。

最佳實踐建議

  1. 優先採用方案一,統一密碼格式,消除安全隱患。
  2. 若無法動服務端(如受管資料庫),用方案二臨時連接,並計劃遷移。
  3. 新建用戶時直接用新版格式:CREATE USER 'u'@'%' IDENTIFIED BY 'pwd';(5.6+ 預設新格式)。

參考:MySQL 5.6 官方文檔 --secure-auth

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved