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;
config.inc.php 中的密碼;mysql_old_password)已於 MySQL 8.0 移除,存在安全風險(易遭暴力破解)。