您好,登錄后才能下訂單哦!
執行緩存時出現意外的服務器響應\u sha2身份驗證:109或者 (HY000/1045)怎么辦,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
mysqli::real_connect(): Unexpected server response while doing caching_sha2 auth: 109 或者 Message: mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'114.254.211.9' (using password: YES).
前提條件:確定用戶和密碼已支持遠程連接, 且密碼的加密規則已修改為 密碼驗證插件 mysql_native_password 支持的密碼
報錯 mysqli::real_connect(): Unexpected server response while doing caching_sha2 auth: 109 來源1:mysql_native_password 本地可以連,線上連不了
分析: 確認過后版本一致,判斷是 mysql 的配置問題 解決:[mysqld]default_authentication_plugin = mysql_native_password 重啟數據庫 結果: 成功
報錯 mysqli::real_connect(): Unexpected server response while doing caching_sha2 auth: 109 來源2:mysql_native_password 線上可以連,本地由php 7.3.x 更新為 php 7.4.x 之后連不了
分析: php 7.4.x 之前 mysqli 擴展連接默認是用 mysql_native_password 密碼驗證插件, php 7.4.x 之后 mysqli 擴展連接默認是用 caching_sha2_password 密碼驗證插件。 所以php 7.4 之后在 mysql 配置中不默認驗證插件為 mysql_native_password 時, mysqli擴展 會使用 caching_sha2_password 密碼驗證插件連接, 故報錯。 解決:1. 重裝 php 環境到 7.4.0 以下版本 【不推薦】2. 根據上面來源進行解決:[mysqld]default_authentication_plugin = mysql_native_password 重啟數據庫
報錯 Message: mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'114.254.211.9' (using password: YES) 來源:php 7.4.x 環境中,在剛使用 docker 創建的數據庫時默認的密碼驗證插件就是 caching_sha2_password ,而且可以連;之后同樣密碼驗證插件是 caching_sha2_password,使用 navicate 修改密碼后連不了。
分析-1: php 7.4.x 的mysqli擴展支持新的 caching_sha2_password,判斷 navicat 使用的密碼驗證插件 caching_sha2_password 版本問題 解決: 在 mysql 最新的客戶端使用密碼驗證插件 caching_sha2_password 修改密碼ALTER USER 'root'@'%' IDENTIFIED BY 'ffc' PASSWORD EXPIRE NEVER;ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'ffc';FLUSH PRIVILEGES;結果: 失敗, 仍然報錯:Message: mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'114.254.211.9' (using password: YES). 結論: 與 navicate 的密碼驗證插件無關 分析-2: 與操作執行的順序有關。因為當前用戶在修改當前用戶的密碼驗證方式,導致此連接不再可用,那么修改之后是否生效呢? 解決: 在 navicat 或者 mysql 客戶端中, 在當前用戶登錄連接后, 通過密碼驗證插件 caching_sha2_password 修改當前用戶的密碼, 然后使用當前用戶的用戶名和新密碼重新連接成功后, 成功在 php 7.4.x 的 mysqli 擴展中可以正常連接。 思考: 如果修改的不是當前用戶的密碼,是否需要斷開重新連接呢? 答案: 是需要的,并且要使用修改的用戶的用戶名和新密碼進行重新登錄mysql服務器后,才可以在 php 7.4.x 的 mysqli 擴展中連接。
在解決問題之后,對密碼驗證插件 caching_sha2_password 有些模糊,果然在官網找到了相應解釋
Cache clearing operations affect the authentication requirements for subsequent client connections. For each user account, the first client connection for the user after any of the following operations must use a secure connection (made using TCP using TLS credentials, a Unix socket file, or shared memory) or RSA key pair-based password exchange:After account creation.After a password change for the account.After RENAME USER for the account.After FLUSH PRIVILEGES.FLUSH PRIVILEGES clears the entire cache and affects all accounts that use the caching_sha2_password plugin. The other operations clear specific cache entries and affect only accounts that are part of the operation.Once the user authenticates successfully, the account is entered into the cache and subsequent connections do not require a secure connection or the RSA key pair, until another cache clearing event occurs that affects the account. (When the cache can be used, the server uses a challenge-response mechanism that does not use cleartext password transmission and does not require a secure connection.)
大概意思就是:
緩存清除操作會影響后續客戶端連接的身份驗證要求。 對于每個用戶帳戶,在執行以下任何操作之后, 該用戶的第一個客戶端連接必須使用安全連接(使用TLS憑證,Unix套接字文件或共享內存的TCP進行安全連接)或基于RSA密鑰對的密碼交換: 創建帳戶后。 更改帳戶密碼后。 為該帳戶 RENAME USER之后。 FLUSH PRIVILEGES 之后。 FLUSH PRIVILEGES清除整個緩存并影響使用該caching_sha2_password插件的所有帳戶 。其他操作將清除特定的緩存條目,并且僅影響屬于該操作的帳戶。
php 7.4.x 的 mysqli 擴展中默認密碼驗證插件為:caching_sha2_password
密碼驗證插件為:caching_sha2_password 的用戶,在修改密碼之后必須要重新使用客戶端成功連接后方可在php 7.4.x 的 mysqli 擴展中連接。而密碼驗證插件為:mysql_native_password 的用戶不需要重新通過客戶端連接成功即可在php 7.4.x 的 mysqli 擴展中連接
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。