Navicat ≤16.0.17不支持SCRAM-SHA-256,而MongoDB 6.0+默认强制启用,导致认证失败;须在mongod.conf中设disableScramSHA256:true并重启,再以mechanisms:["SCRAM-SHA-1"]重建用户,且Navicat中Authentication Database必须填admin。

SCRAM-SHA-256 与旧版 Navicat 不兼容是主因
Navicat ≤16.0.17(尤其是 v15 及更早)压根不支持 SCRAM-SHA-256 挑战响应流程,而 MongoDB 6.0+ 默认强制启用该机制。服务端一发 SHA-256 challenge,Navicat 解析失败,直接断连,错误却只显示泛泛的 Authentication failed 或 cannot connect to MongoDB,根本不会提“协议不匹配”——这是最让人抓狂的地方。
必须改 mongod.conf 禁用 SHA-256,不能只调 Navicat 设置
客户端没得选,只能让服务端降级。关键配置在 /etc/mongod.conf(Linux)或 mongod.cfg(Windows)里:
-
setParameter下必须加disableScramSHA256: true - 同时设
scramIterationCount: 10000(显式启用 SHA-1 迭代) - 改完必须重启服务:
sudo systemctl restart mongod或net stop MongoDB && net start MongoDB
只改 Navicat 的“Authentication Mechanism”下拉菜单没用——它连发请求的机会都没有,服务端已在握手阶段拒掉。
旧用户凭证哈希仍是 SHA-256,必须删掉重创建
哪怕你已降级服务端配置,只要用户是在 SHA-256 启用后创建的,其密码哈希就锁死在 SHA-256 格式。此时登录仍会失败。
- 先删用户:
use admin→db.dropUser("myuser") - 重建时必须显式指定机制:
mechanisms: ["SCRAM-SHA-1"] - 验证是否生效:
db.getUser("myuser")返回结果中应含"mechanisms" : ["SCRAM-SHA-1"]
Navicat 连接配置里三个字段极易填错
即使服务端和用户都配对了,Navicat 界面里填错任意一项,照样报认证失败:
-
Authentication Database必须填admin(不是你的业务库,也不能留空) - 密码含
@、/、:等字符时,Navicat 不自动 URL 编码,建议临时换简单密码验证 -
Authentication Mechanism下拉框要手动选SCRAM-SHA-1(v16+ 才有此选项;v15 及更早版本无此控件,只能靠服务端降级)
真正卡住人的,往往不是服务端配置多难,而是 Navicat 界面里那几个输入框填得似是而非——尤其 Authentication Database 填成业务库名,测试连接能过,点开数据库就崩,这种错最难排查。











