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

解決 PHP 連接 MySQL 4.1+ 版本認證協定錯誤:old_password 方案

     編輯:MySQL 資料庫相關知識

錯誤現象

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

PHP 內建 mysql extension 基於 3.23 客戶端協定,不支援 MySQL 4.1 新式雜湊認證。

根本原因

  • MySQL 4.1 引入 41 位元組雜湊 (SHA1 兩次)
  • PHP mysql extension 僅支援 16 位元組舊式雜湊
  • 設定 root 密碼後,預設使用新雜湊 → 舊客戶端無法認證

立即生效解法:將帳號密碼改為舊式雜湊

mysql> SET PASSWORD FOR 'user1'@'localhost' = OLD_PASSWORD('yourPassWord');
  • OLD_PASSWORD() 產生 16 位元組雜湊,相容舊客戶端
  • 執行後無需重啟服務,PHP 即可連線

長期解決方案

  1. 改用 mysqli extension (PHP 5 內建),完整支援新協定、Prepared Statement、交易
  2. 改用 PDO_MySQL,資料庫抽象層,可移植性最佳
  3. 若必須維持 mysql extension,全庫帳號皆需 OLD_PASSWORD

驗證

mysql> SELECT User, Host, Password FROM mysql.user;
-- Password 欄位長度 16 字元 = 旧雜湊,41 字元 = 新雜湊
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved