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

使用Cloud SQL Go Connector时服务账号IAM认证被拒绝问题排查

排查Cloud SQL MySQL IAM认证访问拒绝问题(Go Connector)

以下是针对你遇到的Error 1045 (28000): Access denied问题的具体排查方向:

  • 确认数据库用户的IAM认证配置正确性
    检查数据库用户是否正确关联IAM认证机制,执行以下SQL查询:

    SELECT user, host, plugin FROM mysql.user WHERE user = '<username>';
    

    需确保plugin字段值为authentication_iam。若不是,重新创建用户:

    DROP USER IF EXISTS '<username>'@'%';
    CREATE USER '<username>'@'%' IDENTIFIED WITH authentication_iam;
    GRANT ALL PRIVILEGES ON <database>.* TO '<username>'@'%';
    FLUSH PRIVILEGES;
    
  • 修正连接字符串的密码字段
    使用IAM认证时,Go Connector会自动生成临时令牌作为密码,无需手动填写密码值。你当前连接字符串中的:empty会导致驱动尝试用固定字符串认证,而非触发IAM流程,修改为:

    dbURI := fmt.Sprintf("%s:@cloudsqlconn(localhost:3306)/%s?parseTime=true", dbUser, dbName)
    
  • 验证服务账号凭据加载
    本地测试时,确保环境变量GOOGLE_APPLICATION_CREDENTIALS指向目标服务账号的密钥文件;GCP环境(如Cloud Run、GCE)需确认服务账号已正确附加到资源。可在代码中添加日志验证:

    creds, err := google.FindDefaultCredentials(context.Background(), cloudsqlconn.Scope)
    if err != nil {
        log.Printf("凭据加载失败: %v", err)
    } else {
        log.Printf("当前使用的服务账号: %s", creds.ServiceAccountEmail)
    }
    
  • 确认实例的IAM认证标志生效
    通过gcloud命令验证实例配置:

    gcloud sql instances describe <instance-name> --format="value(settings.databaseFlags)"
    

    输出必须包含name: iam_authentication, value: on。若未开启,执行以下命令并重启实例:

    gcloud sql instances patch <instance-name> --database-flags=iam_authentication=on
    
  • 更新依赖版本
    确保使用支持IAM认证的最新依赖版本:

    go get -u github.com/go-sql-driver/mysql
    go get -u cloud.google.com/go/cloudsqlconn
    

    其中github.com/go-sql-driver/mysql需v1.6.0及以上版本。

  • 检查服务账号角色绑定范围
    Cloud SQL Instance User角色需绑定到Cloud SQL实例级别,而非仅项目级别。进入实例详情页的「权限」标签,确认目标服务账号已被添加并赋予该角色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:52