MySQL 4.1.1+ 將密碼雜湊從 16 位升級為 41 位(以 * 開頭),採用新認證協議。舊版客戶端(如 PHP 4.x 自帶 libmysql.dll、舊版 JDBC/ODBC)不支持新協議,報錯:
#1250 - Client does not support authentication protocol requested by server; consider upgrading MySQL client
替換應用依賴的客戶端庫為 4.1.1+ 版本。實踐中常遇阻礙:
• PHP php_mysql.dll 依賴 libmysql.dll,新版 DLL 可能缺少 mysql_drop_db() 等函數導致加載失敗。
• 需等待 PHP 或連接器官方發布兼容版本。
mysqld-nt --old-passwords
另開窗口測試 SELECT PASSWORD('test');,輸出應為 16 位雜湊(如 162eebfb6477e5d3)。
編輯 my.ini(Windows 通常在 C:\Windows\my.ini 或 C:\WINNT\my.ini),[mysqld] 區塊添加:
[mysqld]
basedir=C:/mysql
datadir=C:/mysql/data
set-variable=old-passwords
重啟服務生效。
ALTER TABLE mysql.user MODIFY Password CHAR(16);
UPDATE mysql.user SET Password=OLD_PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;
系統會自動切換至舊認證模式。修改回 CHAR(41) 則切回新模式。切換後必須重新設置密碼並刷新權限。
mysqli 或 PDO_MySQL,原生支持新協議)。old-passwords,並制定遷移時間表。old-passwords,強制使用 SHA-256 加密(caching_sha2_password,5.7+/8.0 默認)。