MongoDB 7.0 默认仅支持SCRAM-SHA-256认证,禁用SCRAM-SHA-1;若驱动未显式指定authMechanism=SCRAM-SHA-256或版本过旧,连接将因机制不匹配而报Authentication failed。

直接结论:MongoDB 7.0 默认启用 SCRAM-SHA-256 认证,禁用旧版 SCRAM-SHA-1;若驱动未显式支持 SHA-256 或未配置 authMechanism=SCRAM-SHA-256,连接会报 Authentication failed。
为什么升级后突然连不上?
从 MongoDB 6.0 开始,SCRAM-SHA-1 被标记为 deprecated;到 7.0,服务端默认只接受 SCRAM-SHA-256(除非显式降级配置)。但很多老项目仍在用较旧的驱动(如 pymongo
常见错误现象包括:
-
Authentication failed.(无更具体上下文) Unable to authenticate using sasl protocol.- 日志中出现
Failed to authenticate with mechanism SCRAM-SHA-1
如何确认当前认证机制和驱动行为
先验证服务端实际启用的机制:
db.adminCommand({getCmdLineOpts: 1}).parsed.security.authenticationMechanisms
正常应返回 ["SCRAM-SHA-256"](或包含该值)。再检查驱动是否支持 SHA-256:
-
pymongo:≥ 4.0 支持,默认使用 SHA-256; -
mongo-java-driver:≥ 4.11 默认协商 SHA-256;authMechanism=SCRAM-SHA-256 -
node-mongodb-native:≥ 4.13 自动协商;&authMechanism=SCRAM-SHA-256
注意:mongosh 1.10+ 自动适配,但老版 mongo shell(已弃用)完全不支持 SHA-256。
临时兼容方案(不推荐长期使用)
仅限测试或紧急回退,**生产环境禁止**。需在启动 mongod 时显式开启双机制:
mongod --auth --setParameter authenticationMechanisms=SCRAM-SHA-1,SCRAM-SHA-256 ...
或在 /etc/mongod.conf 中添加:
security: authenticationMechanisms: ["SCRAM-SHA-1", "SCRAM-SHA-256"]
重启后验证是否生效:
db.runCommand({connectionStatus: 1}).authInfo.mechanisms
返回应含两个值。但要注意:SHA-1 已被 NIST 淘汰,且 7.0 后续小版本可能彻底移除支持。
真正可靠的修复方式
升级驱动 + 显式声明机制是最小侵入、最可持续的做法:
- Python(pymongo):升级至
pymongo>=4.0,连接字符串无需改;若仍用旧版,必须加&authMechanism=SCRAM-SHA-256 - Java(MongoClientSettings):确保 builder 中调用
.applyToClusterSettings(...)并设置credential = MongoCredential.createScramSha256Credential(...) - Node.js:连接字符串末尾追加
&authMechanism=SCRAM-SHA-256,例如:mongodb://user:pass@host:27017/?authMechanism=SCRAM-SHA-256 - Go(mongo-go-driver):v1.11+ 默认支持,旧版需用
options.Client().SetAuth(options.Credential{AuthMechanism: "SCRAM-SHA-256"})
容易被忽略的一点是:某些 ORM 或封装层(如 Mongoose、Spring Data MongoDB)会屏蔽底层驱动参数,必须查清其认证配置入口,不能只改 connection string。











