- 問題描述:以www.ncu.edu.tw 之PHP4版本的 mysql client 3.23.58 無法連線 MySQL 4.1 以上版本資料庫
- 錯誤訊息: Client does not support authentication protocol requested by server; consider upgrading MySQL client
- 原因:因為 MySQL 4.1 以上版本為了提高安全性,使用了新的密碼驗證機制。如此,MySQL 的 Client Library 需要 4.0 版本以上。但目前在 Client 端所使用的 PHP 版本若為 5.0 以下(如 4.3.9),其內建的 MySQL Library 大都為 3.23,並不支援新版的密碼驗證機制。
- 將 PHP 升級為 5.0版以上
- 切換 PHP 4 的 MySQL extension 為 MySqlLi
- 在 MySQL console 下,更新密碼形式改為 OLD_PASSWORD() (設回原來舊版的密碼驗證機制):
- mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd') WHERE Host = 'some_host' AND User = 'some_user';
- mysql> FLUSH PRIVILEGES;
- 因為短期間無法馬上更新www.ncu.edu.tw的PHP版本至PHP5,會影響在原PHP4開發的網頁無法正常顯示,暫時解決如下:
- 電算中心另有一部 web.cc.ncu.edu.tw是去年才安裝,主要用來提供學生網頁空間,
- 這部機器安裝PHP5版本,透過這個版本的 mysql client ,應該可以連結MySQL 4.1 以上版本資料庫,
- 再透過網頁轉址的設定,使用者對外公告的 http://www.ncu.edu.tw/~xxxxx / 網址仍可以沿用。
- 這個短期解決方案須配合修改兩個檔案,加入我們測試過的程式碼如下:
- 一、修改 index.php ,於程式開頭,加入以下轉址程式碼:
- <?php
$webhost = "web.cc.ncu.edu.tw";
if ($_SERVER["SERVER_NAME"] != $webhost) {
$url = 'http://' . $webhost . $_SERVER["PHP_SELF"];
header ("Location: $url");
}
- ?>
- 二、修改連接mysql server 的程式(例:connectDB.php),於程式開頭,加入以下 load mysql module 程式碼:
- <?php
if (! function_exists ('mysql_query')) {
if (! @dl('mysql.so')) {
echo "Could not load mysql extension";
exit;
}
}
- ?>