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

MySQL 8.0.28创建指定REQUIRE cipher用户连接报Access Denied

问题根因

该问题与SSL密码套件校验逻辑本身无关,是两处默认配置冲突导致TLS协商无法完成,最终在认证阶段抛出Access denied报错:

  • mysql:8.0.28官方镜像首次启动自动生成的自签SSL证书默认使用ECDSA椭圆曲线密钥,而指定的ECDHE-RSA-AES128-GCM-SHA256是RSA密钥体系下的TLS1.2密码套件,ECDSA证书无法支撑该套件的协商,TLS握手会直接失败。这种场景下连接还没走到MySQL用户权限校验的cipher对比环节,所以日志不会出现cipher不匹配提示,只会记录最终的认证失败结果。
  • MySQL服务端默认的TLS1.2允许密码套件列表由编译时绑定的OpenSSL默认配置决定,未显式加入指定的目标套件,即使证书类型匹配,协商阶段也不会选中该套件。
修复操作步骤
  • 重新启动MySQL实例,显式配置证书生成规则、允许的TLS版本和密码套件,不要使用默认生成的ECDSA证书,启动命令如下:
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
  -e MYSQL_SSL_CIPHER=ECDHE-RSA-AES128-GCM-SHA256 \
  mysql:8.0.28 \
  --tls-version=TLSv1.2 \
  --ssl-ciphers=ECDHE-RSA-AES128-GCM-SHA256 \
  --require-secure-transport=ON

配置说明:添加MYSQL_SSL_CIPHER环境变量会触发镜像启动脚本生成支持RSA套件的证书,替代默认的ECDSA证书;启动参数显式限制服务端仅支持TLS1.2、仅接受指定密码套件,避免协商出非预期套件。

  • 以root身份连接数据库后,重新创建对应用户,原cipher约束规则不需要调整:
DROP USER IF EXISTS 'user'@'%';
CREATE USER 'user'@'%' IDENTIFIED BY 'root' REQUIRE CIPHER 'ECDHE-RSA-AES128-GCM-SHA256';
FLUSH PRIVILEGES;
  • 客户端连接时显式强制SSL模式、TLS版本和目标密码套件,不要使用默认的PREFERRED模式,避免隐式降级:
mysql -u user -h 127.0.0.1 --port 3306 -p \
  --ssl-mode=REQUIRED \
  --ssl-cipher=ECDHE-RSA-AES128-GCM-SHA256 \
  --tls-version=TLSv1.2
验证标准
  • 使用不匹配的密码套件连接时,日志会正常记录cipher mismatch提示,返回Access denied,与原有现象一致。
  • 使用指定的正确套件连接时,可正常通过认证,连接后执行\s命令查看连接状态,SSL字段会明确显示当前使用的是ECDHE-RSA-AES128-GCM-SHA256加密套件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:12:17