MySQL 8.0 caching_sha2_password 插件 MariaDB 怎么兼容?

文章导读
MySQL 8.0 默认使用 caching_sha2_password 插件,而 MariaDB 客户端或旧版工具通常只支持 mysql_native_password,解决兼容性的最稳妥方案是在 MySQL 8.0 服务器端将用户认证插件修改为 mysql_native_password。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
A A

MySQL 8.0 默认使用 caching_sha2_password 插件,而 MariaDB 客户端或旧版工具通常只支持 mysql_native_password,解决兼容性的最稳妥方案是在 MySQL 8.0 服务器端将用户认证插件修改为 mysql_native_password。

先说结论:MySQL 8.0 与 MariaDB 生态兼容的核心障碍是认证插件不一致,优先修改 MySQL 8.0 用户认证方式而非强行升级客户端。

  • 适用场景:MariaDB 客户端连接 MySQL 8.0 服务器、旧版程序连接 MySQL 8.0、主从复制涉及不同版本。
  • 先处理:通过 ALTER USER 命令将特定用户认证插件切换为 mysql_native_password。
  • 再验证:使用 SELECT user, plugin FROM mysql.user 确认插件已变更且连接成功。

命令速用版

若需立即解决连接报错,可在 MySQL 8.0 服务器执行以下命令修改用户认证方式:

ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;

若需全局生效于新用户,需修改配置文件 my.cnf 或 mysqld.cnf:

[mysqld]
default_authentication_plugin=mysql_native_password

为什么会这样

根本原因是 MySQL 8.0 提升了安全标准,而 MariaDB 及旧客户端仍沿用传统认证机制。

MySQL 8.0.4 版本开始将默认身份验证插件从 mysql_native_password 升级为 caching_sha2_password,旨在支持 SHA-256 哈希和 RSA 加密握手以提升安全性。然而,MariaDB 客户端、旧版 JDBC 驱动、Navicat 老版本及部分 Python 库并未完全适配该新插件,导致握手阶段报错 Authentication plugin 'caching_sha2_password' cannot be loaded。这种机制差异使得即使密码正确,客户端也无法通过服务器验证。

分步处理

按以下步骤操作可确保兼容性与安全性平衡:

第一步:确认当前用户插件状态

登录 MySQL 8.0 服务器,执行查询确认报错用户的当前插件:

SELECT user, host, plugin FROM mysql.user WHERE user='your_username';

若 plugin 列显示 caching_sha2_password,则确认为兼容性问题。

第二步:修改用户认证插件

执行修改命令,将指定用户的认证方式降级为兼容性更好的 mysql_native_password:

MySQL 8.0 caching_sha2_password 插件 MariaDB 怎么兼容?
ALTER USER 'your_username'@'your_host' IDENTIFIED WITH mysql_native_password BY 'your_password';

注意需替换实际的用户名、主机地址和密码,主机地址通常为 % 或具体 IP。

第三步:刷新权限

执行刷新命令使配置立即生效:

FLUSH PRIVILEGES;

第四步:配置文件全局设置(可选)

若希望新建用户默认兼容,编辑/etc/my.cnf 或/etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 段落添加 default_authentication_plugin=mysql_native_password,然后重启 MySQL 服务。

怎么验证是否生效

修改完成后,通过以下两种方式验证:

1. 数据库内查询验证

再次执行查询命令,确认 plugin 列已变为 mysql_native_password:

SELECT user, host, plugin FROM mysql.user WHERE user='your_username';

2. 客户端连接验证

使用原本报错的 MariaDB 客户端或应用程序重新连接,若不再出现 Authentication plugin 错误且能成功登录,即表示兼容性问题已解决。

MySQL 8.0 caching_sha2_password 插件 MariaDB 怎么兼容?

常见坑

处理过程中需注意以下边界条件,避免操作无效:

1. 已有用户不受配置文件影响

修改配置文件 default_authentication_plugin 仅对新建用户生效,已存在的用户必须单独执行 ALTER USER 命令修改,否则仍会报错。

2. 主机地址匹配问题

MySQL 用户区分主机地址,'username'@'localhost' 与 'username'@'%' 是不同账户,需确保修改的是客户端实际连接使用的那个账户。

3. 安全性权衡

mysql_native_password 基于 SHA-1 哈希,安全性低于 caching_sha2_password,建议在内部可信网络使用,公网暴露场景需配合 SSL 加密连接。

常见问题

MariaDB 服务器能直接使用 caching_sha2_password 吗?

通常不建议,MariaDB 默认认证机制与 MySQL 8.0 不同,强行配置可能导致自身生态兼容性问题。

修改密码后为什么还是连不上?

可能修改了错误的用户主机记录,请检查 mysql.user 表中是否存在多条同名用户记录并逐一修改。

重启服务后配置失效怎么办?

检查配置文件中是否有重复的 default_authentication_plugin 设置,确保修改行未被其他配置覆盖。

主从复制报错 Authentication requires secure connection 如何解决?

这是 caching_sha2_password 在非 SSL 连接下的限制,将从库复制用户的认证插件改为 mysql_native_password 即可解决。