MongoDB 6.0 强制弃用 SCRAM-SHA-1 和 MONGODB-CR,仅保留 SCRAM-SHA-256 作为唯一内置认证机制,因其哈希强度不足(SHA-1 易受离线爆破)且 MONGODB-CR 缺乏有效盐值、自 4.0 起已彻底移除逻辑支持;旧用户凭据无法加载,必须用 db.createUser(..., mechanisms: ["SCRAM-SHA-256"]) 重建,并同步升级驱动与显式指定 authMechanism=SCRAM-SHA-256。

为什么 MongoDB 6.0 移除了 SCRAM-SHA-1 和 MONGODB-CR
MongoDB 6.0 并没有“移除所有旧认证协议”,而是正式弃用了 SCRAM-SHA-1 和早已废弃的 MONGODB-CR(MongoDB Challenge-Response),只保留 SCRAM-SHA-256 作为默认且强制启用的认证机制。这不是单纯“升级体验”,而是应对现实攻击面扩大的必要收紧。
原因很直接:SCRAM-SHA-1 的哈希强度已无法抵御现代离线字典爆破;而 MONGODB-CR 更是连盐值(salt)都未正确实现,早在 3.0 版本中就被标记为 deprecated,4.0 起禁止新用户启用,6.0 彻底从服务端逻辑中剥离。
- 如果你在 6.0 启动时看到
Failed to load authentication mechanism: scram-sha-1,说明配置里还残留了security.authorization: enabled但没显式指定security.authenticationMechanisms,或客户端驱动硬编码了旧机制 - 使用
mongosh或老版本mongoshell 连接 6.0 时失败,大概率是 shell 自动 fallback 到SCRAM-SHA-1—— 必须升级到mongosh@1.10+或显式加参数:mongosh --authenticationMechanism SCRAM-SHA-256 - Java 驱动
mongodb-driver-sync 4.7-默认仍尝试 SHA-1;必须升级到4.11+并确认连接字符串含&authMechanism=SCRAM-SHA-256
SCRAM-SHA-256 不是“向后兼容”的可选项
它在 6.0 是唯一允许的 SASL 认证机制,不是“推荐”而是“强制”。即使你用 4.x 创建的用户仍存于 admin.system.users,只要其凭据是以 SCRAM-SHA-1 方式存储的,6.0 启动时就会拒绝加载该用户 —— 日志里会明确报 Ignoring user ...: unsupported authentication mechanism。
这意味着:迁移不是改配置就能完事,必须重置用户凭据。
- 不能靠
db.updateUser()升级旧用户:该命令不改变已有凭据的哈希算法 - 正确做法是用
db.createUser()重建用户,且必须显式指定mechanisms: ["SCRAM-SHA-256"](即使这是默认值,也建议写明) - 若用 LDAP 或 x.509,不受此限制 —— 它们走的是外部认证流程,不依赖内置 SCRAM 实现
容易被忽略的兼容性断点:驱动与连接字符串
很多团队卡在“数据库能启、用户能建、但应用连不上”,问题往往不出在服务端,而在客户端驱动或连接串写法。
-
mongodb://user:pass@host:27017/?authSource=admin在 6.0 下默认走 SHA-256,但某些旧驱动(如 Node.jsmongodb@3.7.3)会忽略这个隐式约定,仍发 SHA-1 挑战 - 必须显式声明:
mongodb://user:pass@host:27017/?authSource=admin&authMechanism=SCRAM-SHA-256 - Python 的
pymongo从4.0起才默认用 SHA-256;3.12及更早版本需手动传参:authMechanism='SCRAM-SHA-256' - Kerberos 用户不受影响,但要注意
GSSAPI机制要求服务端keytab文件权限严格(600),否则 6.0 启动即报错退出
真正麻烦的不是协议切换,而是密钥轮换过程中的双模并存
生产环境不可能停机重置所有用户。6.0 不支持“混合认证模式”,所以必须设计灰度窗口:
- 先在测试集群验证新用户创建 + 新驱动连接全流程
- 对关键应用逐个切流:先部署新驱动 + 新连接串,再在数据库侧删旧用户
- 严禁在副本集不同节点上混用新旧用户 —— 主节点用 SHA-256,从节点还认 SHA-1,会导致复制中断并触发
NotMasterNoSlaveOk错误 - 如果用 Ops Manager 或 Cloud Manager 管理集群,确保其 agent 版本 ≥ 6.0.3,否则无法识别 SHA-256 用户状态,监控面板会持续告警


















