溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

執(zhí)行緩存時出現(xiàn)意外的服務(wù)器響應\u sha2身份驗證:109或者 (HY000/1045)怎么辦

發(fā)布時間:2021-12-30 09:34:25 來源:億速云 閱讀:285 作者:柒染 欄目:大數(shù)據(jù)

執(zhí)行緩存時出現(xiàn)意外的服務(wù)器響應\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).

前提條件:確定用戶和密碼已支持遠程連接, 且密碼的加密規(guī)則已修改為 密碼驗證插件 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

        重啟數(shù)據(jù)庫
    結(jié)果:
        成功

報錯 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 環(huán)境到 7.4.0 以下版本 【不推薦】2. 根據(jù)上面來源進行解決:[mysqld]default_authentication_plugin = mysql_native_password

            重啟數(shù)據(jù)庫

報錯 Message: mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'114.254.211.9' (using password: YES) 來源:php 7.4.x 環(huán)境中,在剛使用 docker 創(chuàng)建的數(shù)據(jù)庫時默認的密碼驗證插件就是 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;結(jié)果:
        失敗, 仍然報錯:Message: mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'114.254.211.9' (using password: YES). 
    結(jié)論:
        與 navicate 的密碼驗證插件無關(guān)

    分析-2: 
        與操作執(zhí)行的順序有關(guān)。因為當前用戶在修改當前用戶的密碼驗證方式,導致此連接不再可用,那么修改之后是否生效呢?
    解決:
        在 navicat 或者 mysql 客戶端中, 在當前用戶登錄連接后,
        通過密碼驗證插件 caching_sha2_password 修改當前用戶的密碼,
        然后使用當前用戶的用戶名和新密碼重新連接成功后,
        成功在 php 7.4.x 的 mysqli 擴展中可以正常連接。


    思考:
        如果修改的不是當前用戶的密碼,是否需要斷開重新連接呢?
    答案:
        是需要的,并且要使用修改的用戶的用戶名和新密碼進行重新登錄mysql服務(wù)器后,才可以在 php 7.4.x 的 mysqli 擴展中連接。

在解決問題之后,對密碼驗證插件 caching_sha2_password 有些模糊,果然在官網(wǎng)找到了相應解釋

    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.)

大概意思就是:

緩存清除操作會影響后續(xù)客戶端連接的身份驗證要求。
對于每個用戶帳戶,在執(zhí)行以下任何操作之后,
該用戶的第一個客戶端連接必須使用安全連接(使用TLS憑證,Unix套接字文件或共享內(nèi)存的TCP進行安全連接)或基于RSA密鑰對的密碼交換:
    創(chuàng)建帳戶后。
    更改帳戶密碼后。
    為該帳戶 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 擴展中連接

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI