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

CloudSQL MySQL8 root用户登录失败:caching_sha2_password认证异常

CloudSQL MySQL 8 root用户认证问题排查与解决

问题背景

拥有一个CloudSQL私有实例,通过堡垒机容器中的CloudSQL Auth Proxy从127.0.0.1访问,RDBMS为MySQL 8,实例由Terraform创建。

日常使用以下命令(通过另一个容器中的mysql客户端)连接:

gcloud compute ssh --zone "<bastion zone>" "<bastion name>" --project "<project id>" --tunnel-through-iap --command "sudo docker run --rm --network=host -it mysql mysql -u root -p -h 127.0.0.1"

尝试root用户登录时,出现错误:

Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

已做的操作:

  1. CloudSQL已启用传统认证,通过其他用户登录后查询用户信息,结果显示root用户的认证插件均为mysql_native_password:
    mysql> select user,host,plugin from user;
    +-------------------+-----------+-----------------------+
    | user              | host      | plugin                |
    +-------------------+-----------+-----------------------+
    | <the other user>  |           | mysql_native_password |
    | root              | 127.0.0.1 | mysql_native_password |
    | root              | ::1       | mysql_native_password |
    | root              | localhost | mysql_native_password |
    +-------------------+-----------+-----------------------+
    
  2. 在Terraform实例配置中添加了数据库标志,并重启了实例:
    database_flags {
      name  = "default_authentication_plugin"
      value = "mysql_native_password"
    } 
    

但问题依旧,root用户登录仍被要求使用sha2连接。

解决思路

  • 强制指定认证插件连接:在mysql客户端命令中添加--default-auth=mysql_native_password参数,强制客户端使用对应插件连接。修改后的命令:

    gcloud compute ssh --zone "<bastion zone>" "<bastion name>" --project "<project id>" --tunnel-through-iap --command "sudo docker run --rm --network=host -it mysql mysql -u root -p -h 127.0.0.1 --default-auth=mysql_native_password"
    

    MySQL 8.x客户端默认优先尝试caching_sha2_password认证,即使服务器端用户配置为mysql_native_password,手动指定可规避客户端的默认行为。

  • 重置root用户密码:若root用户的密码是在default_authentication_plugin设置前创建的,密码哈希可能仍为caching_sha2_password格式(即使plugin显示为mysql_native_password)。通过已登录的其他用户执行以下命令重置:

    ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的新密码';
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
    ALTER USER 'root'@'::1' IDENTIFIED WITH mysql_native_password BY '你的新密码';
    FLUSH PRIVILEGES;
    
  • 验证Terraform配置生效状态:用gcloud命令检查实例的数据库标志是否正确应用:

    gcloud sql instances describe <你的实例名> --project <项目ID> | grep default_authentication_plugin
    

    若输出不是mysql_native_password,说明Terraform配置未成功应用,需检查执行日志,确认database_flags是否被正确设置,必要时重新apply并重启实例。

  • 排除Docker容器环境干扰:直接在堡垒机系统中安装mysql客户端(不通过docker容器),执行连接命令测试:

    mysql -u root -p -h 127.0.0.1 --default-auth=mysql_native_password
    

    若能正常登录,说明是docker容器内的mysql客户端存在版本或配置问题,可尝试指定具体镜像版本(如mysql:8.0)或调整容器内客户端配置。

  • 检查root用户密码哈希格式:执行完整查询确认root用户的密码哈希类型:

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

    mysql_native_password的哈希以*开头,caching_sha2_password的哈希以$A$开头。若root@127.0.0.1的哈希为$A$开头,说明密码确实是sha2格式,必须重置密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:52:56