mysql8.0:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client


忽然注意到的情況:

2018/7/19至2018/9/13之間發布的7.1.20、7.1.21、7.1.22和7.2.8、7.2.9、7.2.10這六個版本提供的對caching_sha2_password插件的支持,后續的版本中又取消了相關支持,不知道是因為什么。按照PHP官方的文檔,目前似乎只有xdevapi可以支持caching_sha2_password插件。


 

使用PHP連接MySQL 8的時候,可能會發生如標題所示的錯誤:

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

發生這種錯誤,是由於MySQL 8默認使用了新的密碼驗證插件:caching_sha2_password,而之前的PHP版本中所帶的mysqlnd無法支持這種驗證。解決這個問題,有兩種辦法。

一種辦法是升級PHP支持MySQL 8的新驗證插件。

PHP 7.2.8和PHP 7.1.20已經可以支持caching_sha2_password,直接連接MySQL 8。

截止PHP 7.0.31和PHP 5.6.37還無法支持caching_sha2_password,不知道后續版本是否會做出支持。

可以通過phpinfo()函數了解當前安裝的PHP是否支持caching_sha2_password:

如果不能升級PHP,可以在MySQL 8中創建(或修改)使用caching_sha2_password插件的賬戶,使之使用mysql_native_password,這樣先前版本的PHP就可以連接使用了。

  1. 在CREATE USER時,使用IDENTIFIED WITH xxx_plugin BY 'password',比如:
    CREATE USER 'native'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password!2#4';
  2. 使用ALTER USER修改已有賬戶的驗證插件:
    ALTER USER 'native'@'localhost' IDENTIFIED WITH mysql_native_password

    ALTER USER 'native'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';

    采用前一種方式,賬戶的密碼將被清除;BY子句將為賬戶設置新的密碼。

  3. /etc/my.cnf配置文件中,有一行:
    # default-authentication-plugin=mysql_native_password

    請刪除注釋符號“#”並重新啟動mysqld使之生效,此后創建的賬戶均默認使用mysql_native_password。

  4. 如果您完成MySQL Server的安裝之后,在沒有啟動過mysqld服務的情況下修改/etc/my.cnf配置,那么啟動mysqld之后創建的'root'@'localhost'賬戶也是使用mysql_native_password插件的。

就這些,希望有幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM