You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL认证从mysql_native_password迁移至caching_sha2_password并兼容现有应用?

迁移至caching_sha2_password认证的实现方案

目前我仅在Java应用(Spring)或bash脚本中使用mysql_native_password认证方式,配置如下:

Java应用的application.properties:

spring.datasource.username=root
spring.datasource.password=rootpw

原生bash脚本:

export MYSQL_PWD=rootpw; mysql --user=root --database=mytable -e "INSERT INTO mytable VALUES(...)"

问题:如何将这些应用迁移为使用caching_sha2_password认证,同时仍可通过上述账号密码组合进行身份验证?


一、MySQL端修改用户认证插件

首先需要在MySQL服务器中更新目标用户的认证插件为caching_sha2_password,同时保留原密码组合:

  1. 登录MySQL权限账号(如root):
mysql -u root -p
  1. 修改用户的认证插件(根据实际访问范围选择%或localhost):
-- 允许远程访问的用户
ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'rootpw';
-- 仅本地访问的用户
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'rootpw';
  1. 刷新权限使配置生效:
FLUSH PRIVILEGES;

二、Java(Spring)应用适配

Spring应用只需确保MySQL驱动版本支持caching_sha2_password,Connector/J 8.0及以上版本原生支持该认证方式:

  1. 确认依赖中的驱动版本(以Maven为例):
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version> <!-- 需为8.0+版本 -->
</dependency>
  1. 原有application.properties配置无需修改,驱动会自动适配认证方式。若遇连接报错,可在JDBC URL中添加allowPublicKeyRetrieval=true参数:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=rootpw

三、Bash脚本适配

bash中使用的mysql客户端需为8.0及以上版本,该版本已原生支持caching_sha2_password:

  1. 检查客户端版本:
mysql --version
  1. 若版本为8.0+,原脚本可直接使用,无需修改:
export MYSQL_PWD=rootpw; mysql --user=root --database=mytable -e "INSERT INTO mytable VALUES(...)"

若客户端版本低于8.0,需升级至MySQL 8.0客户端版本才能支持新认证方式。


内容的提问来源于stack exchange,提问作者membersound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:52:09