MySQL 8.0.4+默认认证插件为caching_sha2_password,导致旧客户端(如JDBC

MySQL 8.0 默认 auth plugin 导致老客户端连接失败
MySQL 8.0.4+ 默认使用 caching_sha2_password 认证插件,而旧版 JDBC(Public Key Retrieval is not allowed 或 Client does not support authentication protocol requested by server。这不是网络或权限问题,是认证协议不兼容。
临时方案:降级用户认证插件为 mysql_native_password
适用于开发/测试环境快速恢复连接,不推荐生产长期使用(安全性略低)。需用 root 或高权限账号执行:
ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
注意点:
- 必须指定主机(如
'%'或'localhost'),不能只写用户名 - 执行后需
FLUSH PRIVILEGES;(部分 MySQL 版本需要) - 若用户是
root@localhost,本地 socket 连接可能仍走auth_socket,需单独处理:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '...';
JDBC 连接字符串必须显式启用 allowPublicKeyRetrieval(慎用)
如果坚持用 caching_sha2_password 且无法升级驱动,可在连接 URL 中加参数绕过公钥获取限制(仅限可信内网环境):
Word报告自动生成神器。自动生成专业Word文档报告,支持模板填充、目录生成、表格/图表插入、页眉页脚、多级标题、样式主题、批量邮件合并。当用户需要生成Word报告、创建合同文档、批量生成通知/证书、填充Word模板、制作商业计划书时触发。
jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false
但要注意:
-
allowPublicKeyRetrieval=true会降低中间人攻击防护能力 -
useSSL=false是配套要求,否则可能报SSL connection is required - MySQL 8.0.13+ 已默认禁用该参数,需同时加
serverTimezone=UTC等其他必要参数,否则驱动初始化失败
根本解法:驱动版本与服务端配置协同升级
生产环境唯一稳妥路径是两端对齐:
- JDBC:升级到
mysql-connector-java 8.0.16+(推荐 8.0.33+),并移除allowPublicKeyRetrieval - Python:改用
pymysql(纯 Python,天然支持)或升级mysqlclient>=1.4.6 - PHP:升级到
mysqli7.4+ 或改用PDO_MySQL+mysqlnd驱动(8.0+ 默认支持) - 服务端可选:在
my.cnf全局设default_authentication_plugin=mysql_native_password,但仅影响新建用户,已有用户不变
最易被忽略的是:很多 Docker 镜像或一键安装包(如 XAMPP、MAMP)自带的 MySQL 客户端仍是 5.7 版本,连不上自己装的 8.0 服务端——此时不是改服务端,而是换客户端二进制或用 mysql --protocol=tcp -h127.0.0.1 绕过 socket 认证差异。


















