PHP 5 連接 mysql 5 的認證協議問題

- 中國WEB開發者網絡 (
-- 技術教程 (
--- PHP 5 連接 mysql 5 的認證協議問題 (
-- 作者:未知
-- 發佈日期: 2005-03-17
MYSQL 4.1以後, 採用了一種新的用戶認證協議, 對於老的客戶端會出現不支持認證協議的錯誤, 以下是官方網站的解決方法﹔

1Upgrade all client programs to use a 4.1.1 or newer client library.

更新客戶端庫,這需要更新PHP的擴展庫,對於老的api PHP已經不提供了這樣的擴展庫了

2When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password.


3Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function: mysql> SET PASSWORD FOR

-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

Alternatively, use UPDATE and FLUSH PRIVILEGES: mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
-> WHERE Host = 'some_host' AND User = 'some_user';


Substitute the password you want to use for ``newpwd'' in the preceding examples. MySQL cannot tell you what the original password was, so you'll need to pick a new one.


4Tell the server to use the older password hashing algorithm:

Start mysqld with the --old-passwords option.


5Assign an old-format password to each account that has had its password updated to the longer 4.1 format. You can identify these accounts with the following query: mysql> SELECT Host, User, Password FROM mysql.user

-> WHERE LENGTH(Password) > 16;

For each account record displayed by the query, use the Host and User values and assign a password using the OLD_PASSWORD() function and either SET PASSWORD or UPDATE, as described earlier.