golang 连接 oceanbase 3.2.3 一直报access denied,obclient可正常连接

【 使用环境 】测试环境
【 OB 】
【 使用版本 】5.7.25-OceanBase-v3.2.3.3
【问题描述】golang 连接 oceanbase 3.2.3 一直报access denied
【复现路径】相关代码如下:
gorm 1.25.12
mysql 1.5.1
package main

import (
“fmt”
gorm.io/driver/mysql
gorm.io/gorm
“log”
“time”
)

func main() {

encodedUser := "xxx"
encodedPassword := "xxx"
host := "127.0.0.1"
port := "2881"
dbname := "test_xxx"

// 构造DSN
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local&allowNativePasswords=true", encodedUser, encodedPassword, host, port, dbname)
fmt.Println(dsn)

gormConfig := &gorm.Config{
	SkipDefaultTransaction: true,
	PrepareStmt:            true,
}

// 尝试连接数据库,最多重试3次
var db *gorm.DB
var err error
maxRetries := 3
for i := 0; i < maxRetries; i++ {
	db, err = gorm.Open(mysql.Open(dsn), gormConfig)
	if err == nil {
		break
	}
	log.Printf("第 %d 次连接失败: %v,将在 5 秒后重试...", i+1, err)
	time.Sleep(5 * time.Second)
}
if err != nil {
	log.Fatalf("多次尝试后仍连接失败: %v", err)
}
fmt.Println("连接成功!")

// 获取通用数据库对象(用于连接池配置)
sqlDB, err := db.DB()
if err != nil {
	log.Fatalf("获取数据库对象失败: %v", err)
}
defer sqlDB.Close()

// 配置连接池
sqlDB.SetMaxOpenConns(25)           // 最大连接数
sqlDB.SetMaxIdleConns(10)           // 空闲连接数
sqlDB.SetConnMaxLifetime(time.Hour) // 连接最大存活时间

// 示例:查询 OceanBase 版本
var version string
result := db.Raw("SELECT version()").Scan(&version)
if result.Error != nil {
	log.Fatalf("查询 OceanBase 版本失败: %v", result.Error)
}
fmt.Printf("OceanBase 版本: %s\n", version)

}

【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

日志采集场景: SQL执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

为了更好地帮助您解决使用 Golang 连接 OceanBase 3.2.3 报错“access denied”的问题,我们建议您使用 obdiag 工具进行日志采集。上述命令会收集与SQL执行错误相关的日志信息,这有助于我们分析为什么Golang连接时会出现权限拒绝的问题,而obclient却可以正常连接。

请您提供一些额外的信息以便我们更准确地定位问题:

  1. 您使用的Golang驱动版本是多少?
  2. 在Golang代码中,您是如何配置连接字符串的?能否分享一下相关的代码片段或配置项(请确保脱敏处理)?
  3. obclient和Golang应用是否从同一台机器连接OceanBase?如果不是,请问它们分别是从哪里进行连接的?
  4. 是否对用户权限进行了任何更改或者有涉及到网络策略调整的情况?

另外,请将通过obdiag采集到的日志压缩包提供给我们,这对于我们排查问题是十分重要的。感谢您的配合!

附上敏捷诊断工具 obdiag 使用帮助链接

你好,你提的这个技术问题牵涉到OceanBase企业版范围内的功能细节。建议你通过以下方式寻求帮助:
1.如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;
2.如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。
OceanBase官网商务咨询

https://www.oceanbase.com/contactus?fromPage=https%3A%2F%2Fwww.oceanbase.com%2Fsoftwarecenter-enterprise&dataSources=softwarecenter-enterprise_footercontact_d2022