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

MongoDB 6.0.2容器连接失败:SCRAM-SHA-1认证错误求助

MongoDB 6.0.2 连接认证失败及updateUser命令问题解决

一、连接认证失败问题解决

问题根源

MongoDB 6.0 默认仅启用 SCRAM-SHA-256 作为认证机制,而你的Go mongo驱动默认使用 SCRAM-SHA-1,导致双方认证机制不匹配,触发认证失败错误。

解决方案

有两种可行方案,优先推荐方案1:

方案1:修改客户端代码,指定SCRAM-SHA-256认证机制

在认证配置中明确指定认证机制为SCRAM-SHA-256,适配MongoDB 6.0的默认设置:

auth := options.Credential{
    AuthSource:     "admin",
    Username:       userName,
    Password:       pass,
    AuthMechanism:  "SCRAM-SHA-256", // 指定MongoDB 6.0默认的认证机制
}
opts := options.Client().ApplyURI(URI).SetAuth(auth).SetTLSConfig(&config)
client, err := mongo.Connect(ctx, opts)

方案2:修改MongoDB服务端启动参数,兼容SCRAM-SHA-1

如果需要兼容依赖SCRAM-SHA-1的旧客户端,可以在容器启动命令中添加参数,同时启用两种认证机制:

--authenticationMechanisms=SCRAM-SHA-1,SCRAM-SHA-256

不建议仅启用SCRAM-SHA-1,因为它的安全性低于SCRAM-SHA-256,不符合MongoDB 6.0的安全推荐。

二、updateUser命令兼容性说明

updateUser 命令在MongoDB 6.0.2中并未被弃用,但需要注意以下细节:

  • 执行命令的用户必须具备 userAdmin 或 userAdminAnyDatabase 权限
  • 修改管理员用户时,必须在admin数据库下执行命令(而非业务数据库)
  • 你的代码逻辑本身没问题,但建议确保字段名使用原始字符串(避免转义歧义),调整后的示例:
res := struct{ Ok int }{}
opts := options.RunCmd().SetReadPreference(readpref.Primary())  
command := bson.D{{"updateUser", usrName}, {"pwd", pass}}
// 修改管理员用户需指定admin数据库
err = client.Database("admin").RunCommand(context.TODO(), command, opts).Decode(&res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:55:24