博客 / 詳情

返回

MySQL客户端連接MySQL8.x出現"錯誤碼2058"(Windows環境)

MySQL客户端登錄 MySQL8 時,出現如下登錄問題:

image

原由
從 MySQL 8.0.4 開始,MySQL 默認身份驗證插件從 mysql_native_password 改為 caching_sha2_password 。相應地,libmysqlclient 也使用 caching_sha2_password 作為默認的身份驗證機制。

在這之前 MySQL 5.6/5.7 使用的默認密碼插件是 mysql_native_passwordmysql_native_password 的特點是不需要加密的連接。該插件驗證速度特別快,但是不夠安全,因為,mysql_native_password 使用的是於 SHA1 算法,NIST(美國國家標準與技術研究院)在很早之前就已建議停止使用 SHA1 算法,因為 SHA1 和其他哈希算法(例如 MD5)容易被破解。

其實從 MySQL 5.6 開始就引入了更安全的認證機制:ha256_password 認證插件。它使用一個加鹽密碼(salted password)進行多輪 SHA256 哈希(數千輪哈希,暴力破解更難),以確保哈希值轉換更安全。但是,建立安全連接和多輪 hash 加密很耗費時間。雖然安全性更高,但是驗證速度不夠快。

MySQL 試圖結合二者的優點。於是在 MySQL-8.0.3 引入了一個新的身份驗證插件 caching_sha2_password ,作為sha256_password的代替方案,在sha256_password 的基礎上進行了改進補上了短板,既解決安全性問題又解決性能問題。與此同時 sha256_password將退出時代的浪潮。MySQL 預計在未來版本中將其刪除。使用 sha256_password 進行身份驗證的 MySQL 賬户建議轉為 caching_sha2_password

所以,當你使用舊版MySQL客户端連接MySQL8服務時,由於舊版客户端不支持該插件,導致連接失敗。下面是解決該問題的方案。

解決方案

方案1:更新MySQL客户端(推薦)

升級支持MySQL8.x身份認證插件caching_sha2_password的MySQL客户端。

方案2:修改用户認證插件

要解決這個問題,可以將 MySQL 數據庫用户的認證插件修改為 mysql_native_password

  1. 使用cmd登錄MySQL
# 登錄MySQL
C:\Users\lenovo>mysql -u root -P 3306 -h localhost -p
  1. 查看當前用户的認證插件
# 查看root用户的認證插件
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
  1. 修改用户密碼和身份認證插件
# 修改`root`@`localhost`用户的密碼和身份認證插件
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

image

  1. 刷新權限
FLUSH PRIVILEGES;

方案3:修改 MySQL 配置文件(可選)

如果您希望所有新用户默認使用 mysql_native_password 插件,可以修改 MySQL 的配置文件my.ini來設置默認插件為 mysql_native_password

  1. 打開 MySQL 配置文件。文件所在位置 C:\ProgramData\MySQL\MySQL Server X.Y\my.ini。
  2. 在 [mysqld] 部分下添加或修改以下行:
[mysqld]
default-authentication-plugin=mysql_native_password
  1. 保存文件並重啓 MySQL 服務以應用更改:
net stop MySQL && net start MySQL

使用方案2可能出現的問題

修改用户密碼和加密規則時會出現如下問題:

image

原因是:mysql_native_password 插件(模式)在新版本中被棄用了,新插件為caching sha2 password,需要啓用一下舊插件。

  1. 檢查插件是否已安裝
    首先,你需要確認 mysql_native_password 插件是否已經安裝在服務器上。你可以通過以下 SQL 命令查看所有已安裝的插件:
mysql> SHOW PLUGINS;

查找 Name: mysql_native_password 的行,看它的 Status 是否為 ACTIVE。如果不是,你需要啓用它。此時可以看到如下圖沒有啓動插件:
image

  1. 啓動插件
    如果插件未激活,需要將插件狀態改為【ACTIVE】;
    先打開my.ini文件,在[mysqld]下面添加如下:
[mysqld]
mysql_native_password=ON
  1. 重啓MySQL服務
    在安裝或啓用插件後,重新啓動 MySQL 服務以確保更改生效。這可以通過以下命令完成(具體命令取決於你的操作系統):
net stop MySQL && net start MySQL
  1. 驗證更改
    重新啓動服務後,再次運行SHOW PLUGINS; 命令,檢查 mysql_native_password 的狀態是否為 ACTIVE
    image
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.