authentication failed大概率是mongodb 6.0+默认启用scram-sha-256而navicat≤16.0.17仅支持scram-sha-1,需在mongod.conf中设disablescramsha256:true、重启服务,并用mechanisms:["scram-sha-1"]重建用户。

Navicat 连接报 Authentication failed,但用户名密码都对?
大概率是 MongoDB 服务端用 SCRAM-SHA-256 签发了用户凭证,而 Navicat ≤16.0.17 不支持该机制——它只认 SCRAM-SHA-1。错误里不会写明机制不匹配,只会泛泛报 Authentication failed。这不是 Navicat 填错字段的问题,而是服务端哈希格式和客户端能力根本对不上。
必须改 mongod.conf 的 disableScramSHA256:true
MongoDB 6.0+ 默认强制启用 SCRAM-SHA-256,且不接受客户端协商降级。仅在 Navicat 里选“SCRAM-SHA-1”没用,服务端仍按 SHA-256 流程发挑战,Navicat 解不了就断连。
修改 /etc/mongod.conf(Linux)或 mongod.cfg(Windows),在 setParameter 区块中加入:
setParameter: disableScramSHA256: true
保存后重启服务:sudo systemctl restart mongod(Linux)或 net stop MongoDB && net start MongoDB(Windows)。
用户必须用 mechanisms:["SCRAM-SHA-1"] 重建
旧用户即使密码没变,只要是在 SHA-256 启用后创建的,其凭证哈希就是 SHA-256 格式。降级配置后仍无法登录,必须删掉重来。
- 先删除原用户(以
admin库为例):use admin→db.dropUser("myuser") - 再创建,显式指定机制:
db.createUser({ user:"myuser", pwd:"mypass", roles:[{role:"readWrite", db:"myapp"}], mechanisms:["SCRAM-SHA-1"] }) - 验证是否生效:
db.getUser("myuser")返回结果中应含"mechanisms" : ["SCRAM-SHA-1"]
Navicat 连接配置里 authSource 不能空、SSL 开关要对齐
即使机制配对了,以下两个点错一个仍会失败:
-
Authentication Database字段必须填对——如果用户建在admin库,这里就得填admin;填空或填错(比如填成目标业务库名)会导致认证源找不到用户 - 若 MongoDB 启用了 TLS(如阿里云、Atlas、腾讯云),Navicat 必须勾选
Use SSL,且协议选Require;选Preferred或Allow会静默失败 - 连接字符串格式必须为
mongodb://开头,密码含特殊字符(如@、/)需 URL 编码,例如pass%40123
真正容易被忽略的是:服务端配置改完后,用户不重建,一切白搭。哈希算法写进凭证里了,不是靠客户端切换就能绕过去的。











