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

使用go-sql-driver连接GCP托管MySQL时遭登录拒绝(云代理方式)

问题:使用go-sql-driver连接GCP托管MySQL时登录被拒绝

我通过跳板机做本地端口转发到GCP托管的MySQL实例,使用go-sql-driver连接时,能成功建立连接,但执行查询时始终返回登录拒绝错误。使用常规用户名/密码时,代码在GCP和本地数据库都能正常工作,但用gcloud sql generate-login-token生成的认证令牌就不行——而这个令牌在IntelliJ、DBeaver等数据库工具中可以正常登录。

代码示例

package main

import (
    "database/sql"
    "fmt"
    "log"
    "os"

    "github.com/go-sql-driver/mysql"
    _ "github.com/go-sql-driver/mysql"
)

func connectTCPSocket() (*sql.DB, error) {
    mustGetenv := func(k string) string {
        v := os.Getenv(k)
        if v == "" {
            log.Fatalf("Fatal Error in connect_tcp.go: %s environment variable not set.", k)
        }
        return v
    }

    c := mysql.Config{
        User:   mustGetenv("DB_USER"),
        Passwd: mustGetenv("DB_PASS"),
        Net:    "tcp",
        Addr:   mustGetenv("INSTANCE_HOST") + ":" + mustGetenv("DB_PORT"),
        DBName: mustGetenv("DB_NAME"),
        ParseTime: true, // demo option
        AllowNativePasswords:    true,
        AllowOldPasswords:       true,
        AllowCleartextPasswords: true,
    }

    dbPool, err := sql.Open("mysql", c.FormatDSN())

    if err != nil {
        return nil, fmt.Errorf("sql.Open: %w", err)
    }

    // ...

    return dbPool, nil
}

func main() {
    fmt.Println("Starting")
    db, err := connectTCPSocket()

    if err != nil {
        log.Fatal(err)
    }
    // fmt.Println(db)

    rows, err2 := db.Query("Select field1 from table")
    if err2 != nil {
        log.Fatal(err2)
    }
}

错误信息

Access denied for user ‘user’@‘ipaddress’ (using password: YES)

环境与配置补充

  • 使用gcloud compute ssh cloudsql-jump而非gcloud shell
  • 端口转发命令:gcloud compute ssh cloudsql-jump --project projectName --zone us-east4-c --internal-ip -- -L 1234:1.0.0.1:3306
  • 认证令牌通过gcloud sql generate-login-token生成
  • INSTANCE_HOST设为localhost,DB_PORT设为1234(对应端口转发配置)
  • IntelliJ中使用jdbc:mysql://localhost:1234结合上述令牌可正常连接
  • 代码运行完整输出:
Starting
2025/03/27 06:42:47 Error 1045 (28000): Access denied for user 'user'@'10.0.0.1' (using password: YES)

寻求解决该登录拒绝问题的建议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:55:11