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

MySQL 5.0 密碼修改後無法登入?舊版客戶端協議相容性解決方案

     編輯:MySQL 資料庫相關知識

問題現象

MySQL 4.1.1+ 採用 41 位雜湊密碼(以 * 開頭),舊版客戶端(含 PHP 4 內建 libmysql.dll)僅支援 16 位舊格式,導致錯誤:

#1250 - Client does not support authentication protocol requested by server;
consider upgrading MySQL client

官方兩大解法

方案一:升級客戶端函式庫(推薦但受限)

以 MySQL 5.0 版 libmysql.dll 替換 PHP ext/ 目錄下舊版。實測問題:新 DLL 缺少 mysql_drop_db() 等函數,導致 php_mysql.dll 載入失敗。需等待 PHP 或 MySQL 釋出相容版本。

方案二:強制 Server 使用舊密碼演算法(即時生效)

  1. 啟動參數法:
    mysqld-nt --old-passwords

    驗證:SELECT PASSWORD('mypass'); 回傳 16 位雜湊。

  2. 配置檔持久化(C:\Windows\my.ini 或 C:\WINNT\my.ini):
    [mysqld]
    basedir=C:/MySQL
    datadir=C:/MySQL/data
    set-variable=old-passwords
  3. 重啟服務,再次設定 root 密碼並 FLUSH PRIVILEGES;。

進階發現:user 表欄位長度決定演算法

mysql.user.Password 欄位長度為 CHAR(16) 時自動切換舊演算法;CHAR(41) 則用新演算法。可透過 ALTER TABLE mysql.user MODIFY Password CHAR(16); 強制切換(修改後需重設密碼)。

PHP 5 + mysqli 完美支援新協議

PHP 5 內建 mysqli 擴展原生支援 41 位雜湊,無需降級 Server。建議長期規劃遷移至 PHP 5 + mysqli/PDO。

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