错误码18认证失败大概率是认证机制不匹配,如服务端启用SCRAM-SHA-256而客户端默认用SCRAM-SHA-1;需检查mongod配置中authenticationMechanisms参数,并在连接串显式指定authMechanism,如&authMechanism=SCRAM-SHA-256。

认证失败(错误码 18)大概率不是密码错了,而是客户端没告诉服务端“用哪种方式验你”——SCRAM-SHA-1 和 SCRAM-SHA-256 不兼容,X.509 更不认密码。
确认服务端实际启用的认证机制
别猜,直接查配置或运行时参数。MongoDB 启动时若指定了 authenticationMechanisms,它就只认这个列表里的机制:
mongod --auth --setParameter authenticationMechanisms=SCRAM-SHA-256,SCRAM-SHA-1
或者在 /etc/mongod.conf 中检查:
security:
authorization: enabled
sasl:
mechanisms: SCRAM-SHA-256
如果配置里写了 SCRAM-SHA-256 但 Compass 默认用 SCRAM-SHA-1(尤其旧版),连接必然失败。
Compass 连接串必须显式指定 authMechanism
UI 界面里没有“认证机制”下拉框,必须靠连接字符串传参。不加 authMechanism 参数,Compass 会按自己版本策略 fallback,不可靠。
- 服务端只支持
SCRAM-SHA-256→ 连接串末尾加&authMechanism=SCRAM-SHA-256 - 服务端启用了 X.509 认证 → 必须用 TLS 连接,且连接串中写
&authMechanism=MONGODB-X509,同时 Compass 要导入对应客户端证书(PEM 格式) - 密码含
@、:、/等字符 → 先对密码做 URL 编码,再拼进连接串,否则解析会截断
驱动/Compass 版本与机制支持不匹配
MongoDB 4.0+ 默认只启用 SCRAM-SHA-256,但 Compass 1.20 以下版本默认发 SCRAM-SHA-1 请求。现象是:密码没错、authSource 正确、网络通,但日志里报 Unsupported mechanism: SCRAM-SHA-1 或类似提示。
- 升级 Compass 到 1.30+(2025 年后发布)可自动协商机制
- 临时降级服务端支持(不推荐):
authenticationMechanisms: SCRAM-SHA-1,SCRAM-SHA-256,让老客户端能连 - X.509 场景下,
tlsAllowInvalidCertificates=true只绕过证书校验,不解决机制错配问题
最容易被忽略的是:Compass 的“连接测试”按钮不会验证 authMechanism 是否生效,它只测网络和基础握手。真正失败发生在首次执行查询时——所以务必用真实集合操作触发完整认证流程。











