Authentication Failed 错误主因常是authSource配置错误而非密码问题:用户在admin库创建则必须显式指定?authSource=admin,Navicat中“Database”字段仅决定默认打开库,不参与认证;云服务如Atlas需用$external且禁手动添加authSource;密码含@/:等特殊字符须URL编码,SSL/TLS开关与协议选项须严格匹配。
Authentication Failed 这个报错不是密码错了就完事了,大概率是认证流程没对上。Navicat 一上来就要执行 listDatabases,而 MongoDB 要求这个操作必须由具备对应角色的用户、在正确的认证数据库里完成——缺一不可。
authSource 配错是最常见的“假失败”
你填了用户名、密码、数据库名,navicat 显示“连接成功”,但左侧空空如也,点开还报 [13][unauthorized] command listdatabases requires authentication,基本就是 authsource 没设对。
- 用户是在
admin库创建的(生产环境几乎全是),那连接字符串里必须显式带?authSource=admin - Navicat 界面里的 “Database” 输入框 ≠
authSource;它只决定连接后默认打开哪个库,不参与认证 - 云服务如 Atlas 必须填
authSource=$external,手改成admin直接失效 - 如果用的是
mongodb+srv://URI(比如从 Atlas 复制的),就别手动加?authSource=xxx—— SRV 记录里已包含,硬加反而破坏解析
密码含特殊字符但没 URL 编码
Navicat 解析连接字符串时,把 @ 当作用户名/密码分隔符,/ 当作路径起始,: 当作端口分隔符。密码里有这些,不编码就会字段错位。
- 错误示例:
mongodb://user:pa@ss/123@192.168.1.10:27017/admin→ Navicat 会把pa当用户名,ss/123@192.168.1.10当密码,后面全乱 - 正确做法:只对密码部分做
encodeURIComponent(),比如pa@ss/123→pa%40ss%2F123 - 浏览器控制台就能快速编码:
encodeURIComponent('pa@ss/123') - 不要用在线转换工具——容易混入不可见空格或全角符号
SSL/TLS 开关与协议选项不匹配
本地单机 MongoDB 默认无 TLS,但 Atlas、阿里云、腾讯云等强制启用。开关不对,不会报 TLS 错误,而是静默超时或 Connection closed。
- Atlas 类服务:必须勾选
Use SSL,Protocol 必须选Require(不能选Preferred或Allow) -
Validate Certificate建议不勾——Let’s Encrypt 证书在系统时间准确时可直连;勾了反而可能因本地 CA 缺失或过期导致certificate verify failed - 若真遇到证书校验失败,下载
isrgrootx1.pem填入CA File,别用已停用的DST Root CA X3 - 本地部署启用了 TLS?那就得配好证书路径,并在 Navicat 勾选验证 + 指定 CA
驱动版本不兼容导致认证被跳过
Navicat 16.3.9 及更早版本默认用旧版 C 驱动,遇到 MongoDB 3.6+(wire version 6+)可能无法完成完整认证握手,表现为连上了却认证失败。
- 错误提示典型特征:
Server at x.x.x.x:x reports wire version 5, but this version of libmongoc requires at least 6 - 进连接设置 → 高级 → 找到
客户端驱动程序→ 切换为旧版(适用于老服务端)或新版(适用于 MongoDB 4.2+) - Navicat 17+ 已默认适配新版协议,若用老版本又没法升级服务端,降级 Navicat 反而是最稳解法
- 用
db.version()确认服务端真实版本,别只看安装包名
authSource 和 mongodb+srv:// 的组合,改一个字符就全盘失效,调试时得盯住整个 URI 的结构,而不是只盯着用户名密码框。











