Atlas的mongodb+srv:// URI必须原样粘贴,不可改为mongodb://,否则跳过DNS SRV解析导致连错节点;密码含特殊字符须URL编码,SSL必须启用且协议选Require,Auth Database须填用户创建时指定的库名(如admin)。
mongodb+srv:// URI 被手动改成 mongodb:// 就会失效
atlas 的 mongodb+srv:// 不是“可有可无的前缀”,它触发 dns srv 查询,自动拉取真实节点地址、端口和 tls 配置。一旦你删掉 +srv、改端口、补 ?authsource=admin 或手动拆解成普通格式,navicat 就会跳过这层解析,直连一个根本不存在或非 tls 的地址。
实操建议:
- 必须从 Atlas 控制台「Connect」→「Connect with the MongoDB Shell」里原样复制整条 URI(含
mongodb+srv://、用户名密码、?tls=true&...) - Navicat 连接类型选
MongoDB,Host 字段留空,直接粘贴到Connection String输入框 - 不要用在线 URI 转换工具,也不要手写——哪怕只少一个
&或多一个空格,都会静默失败
密码含特殊字符但没 URL 编码
Atlas 控制台生成的连接字符串里,密码若含 @、/、:、% 等字符,不会自动编码。Navicat 解析时会把 @ 当作用户名/密码分隔符,把 / 当作路径起始,导致认证字段错位,报 authentication failed 或直接超时。
实操建议:
- 在粘贴前,用浏览器控制台或简单脚本对密码做
encodeURIComponent()(例如密码pa@ss/123→pa%40ss%2F123) - 只编码密码部分,不要动 URI 其他字段(如域名、参数)
- 如果已复制了带未编码字符的 URI,宁可重新进 Atlas 控制台复制,也不要手动改 —— 容易漏掉隐藏空格或全角符号
SSL 开关与协议选项不匹配
Atlas 强制 TLS,且只接受握手成功后持续加密的连接。Navicat 里 Use SSL 没勾选,或协议选了 Preferred/Allow,会导致连接建立后立刻中断,错误日志只显示 Connection closed,没有任何 TLS 相关提示。
实操建议:
- 务必勾选
Use SSL - Protocol 必须选
Require(不是Preferred,也不是Allow) - 不要勾选
Validate Certificate—— Atlas 用 Let’s Encrypt 证书,本地系统时间准的话无需额外 CA 文件;勾了反而可能因证书链校验失败而阻断 - 如果仍报
certificate verify failed,下载isrgrootx1.pem填入 CA File,而不是用过期的DST Root CA X3
Auth Database 填的是“默认库名”而不是用户创建库
Navicat 界面里有个叫 “Database” 的输入框,很多人误以为填自己业务库名(比如 myapp)就行。但 Atlas 用户是在某个库中创建的(db.createUser(...)),这个库才是 authSource。填错就进不了认证流程,测试连接可能显示“成功”,但左侧空荡荡,连 admin 都不显示。
实操建议:
- 查清楚用户在哪建的:进 Atlas 「Database Access」页,看该用户的
Database User列值(常见是admin,项目级用户可能是myapp) - 在 Navicat 的 Authentication 区域,
Auth Database字段填这个值,**不是**连接字符串里的/myapp那部分 - 连接成功后,右键左侧空白区 →
Refresh,或手动在地址栏输入目标库名回车 —— Atlas 默认不枚举无权限库











