Client does not support authentication protocol requested by server
1 -- 錯誤原因分析
今天上線系統時遇到的一個問題:可執行程式使用MySQL4.0.22版本提供的靜態庫編譯,運行時資料庫伺服器是5.0.33版本,當程式真正執行串連資料庫時,曝出下面的錯誤訊息。 Client does not support authentication protocol requested by server; consider upgrading MySQL client
查詢MySQL的協助文檔,它給出這樣的提示 MySQL 5.1 uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older (pre-4.1) clients. If you upgrade the server from 4.0, attempts to connect to it with an older client may fail with the message
翻譯過來大致原因是MySQL自4.1以後使用了不同的鑒權協議,該協議與4.1之前的版本有著很大的不同。所以如果你的用戶端是4.1之前的版本,那麼在串連高版本的資料庫時就會出現這樣的錯誤。
2 -- 解決方案
1、Upgrade all client programs to use a 4.1.1 or newer client library
升級用戶端程式使用4.1.1或者更高版本的用戶端庫。
2、When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password
串連資料庫時,使用升級以前已經存在的賬戶,這些賬戶使用早於4.1版本的密碼格式。
3、Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program
使用早於4.1版本的密碼格式重新設定賬戶密碼,函數SET PASSWORD
和OLD_PASSWORD()
用來完成修改。可以使用下面的任一方法來重設。
方法1:
mysql> SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');
方法2:
mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')-> WHERE Host = 'some_host' AND User = 'some_user';mysql> FLUSH PRIVILEGES;
3 -- 參考資料
1、http://dev.mysql.com/doc/refman/5.1/en/old-client.html