navicat连接mongodb分片集群时authsource必须设为admin,因用户几乎全创建于admin库;database字段仅指定默认库,不参与认证;必须通过authentication database显式设为admin,且须连接mongos而非shard或config节点,同时确保scram-sha-256兼容、密码url编码正确。

Navicat连接MongoDB分片集群时authSource必须设为admin
分片集群的用户几乎全部创建在admin库,但Navicat默认把“Database”字段值当作authSource——这会导致认证流程直接失败。即使你填了myapp作为Database,只要用户不在myapp库里,认证就找不到凭证。
- 务必在Navicat连接配置中显式填写
Authentication Database为admin - 连接字符串里必须带
?authSource=admin(注意不是?authSource=myapp) - 若用
mongodb+srv://协议(如Atlas或云厂商SRV地址),authSource由DNS记录决定,**不能手动添加**,否则解析失败
分片集群必须用mongos入口,不能直连shard节点
Navicat如果填的是某个shard01:27017或configsvr:27019的地址,哪怕能连上,也会在执行listDatabases时报Unauthorized——因为只有mongos才具备路由和聚合权限校验能力。
- 确认你连接的是
mongos进程的地址和端口(默认也是27017,但服务名/进程名必须是mongos) - Linux下可用
ps aux | grep mongos验证;Docker中检查容器名或command是否为mongos - 连接后在Navicat执行任意命令前,先看左下角状态栏显示的“Server”是否含
mongos字样
SCRAM-SHA-256不兼容旧版Navicat(≤16.0.17)
分片集群常运行较新版本MongoDB(≥6.0),默认启用SCRAM-SHA-256机制,而老版Navicat无法处理其挑战响应,错误仍显示为泛泛的Authentication failed。
- 服务端需在
/etc/mongod.conf(或mongos.conf)中添加:setParameter:<br> disableScramSHA256: true
- 重启
mongos服务(不是mongod):sudo systemctl restart mongos - 用
admin库重建用户,显式指定mechanisms: ["SCRAM-SHA-1"],旧用户哈希不会自动降级
密码含特殊字符但未URL编码,导致字段错位
分片集群连接字符串稍长,密码里的@、/、:极易被Navicat误解析为URI分隔符,尤其当密码出现在mongodb://user:pass@host:port/...中时。
- 只对密码部分做
encodeURIComponent(),例如pa@ss/123→pa%40ss%2F123 - 浏览器控制台直接运行
encodeURIComponent('pa@ss/123')最可靠,避免粘贴不可见空格 - 若使用
mongodb+srv://,密码编码规则相同,且authSource不得手动追加
authSource错、连错组件(shard/config/mongos)、机制不匹配、密码未编码四者叠加。最容易被忽略的是:你以为连的是mongos,实际填的是某台shard的IP;或者你改了mongod.conf却忘了同步改mongos.conf。











