Authentication failed大概率是SCRAM-SHA-256与旧版Navicat不兼容,必须在mongod.conf中配置disableScramSHA256:true并重启服务,再用mechanisms:["SCRAM-SHA-1"]重建用户,否则凭证哈希仍为SHA-256格式导致认证失败。
navicat 连接 mongodb 报 authentication failed,如果确认用户名、密码、认证数据库都正确,大概率是 scram-sha-256 与 navicat 不兼容——此时强制降级到 scram-sha-1 是最直接有效的绕过方式,但必须在服务端配置,不能仅靠客户端设置。
MongoDB 自 4.0 起支持 SCRAM-SHA-1,但 6.0+ 默认强制启用 SCRAM-SHA-256,且不再接受客户端协商降级。Navicat ≤16.0.17 无法解析 SHA-256 挑战响应,连接时直接被服务端拒绝,错误里不会明说机制不匹配,只报泛泛的 Authentication failed。
关键点:这不是 Navicat 的“选项”能调出来的,必须让 MongoDB 主动用 SHA-1 签发凭证。
/etc/mongod.conf(Linux)或 mongod.cfg(Windows),在 security 下添加:security: authorization: enabled sasl: hostName: your-hostname # 可选,若报 SASL 错误再加 serviceName: mongodb # 强制使用 SHA-1 认证机制 enableLocalhostAuthBypass: false
setParameter 区块中显式指定(MongoDB ≥4.2 支持):setParameter: scramIterationCount: 10000 # 关键:禁用 SHA-256,只留 SHA-1 disableScramSHA256: true
sudo systemctl restart mongod(Linux)或 net stop MongoDB && net start MongoDB(Windows)旧用户即使密码没变,只要是在 SHA-256 启用后创建的,其凭证哈希就是 SHA-256 格式,降级配置后仍无法登录。必须删掉重来。
admin 库为例):use admindb.dropUser("myuser")
db.createUser({ user: "myuser", pwd: "mypass", roles: [{ role: "readWrite", db: "myapp" }], mechanisms: ["SCRAM-SHA-1"] // 必须写这行})
db.getUser("myuser") 返回结果中应含 "mechanisms" : ["SCRAM-SHA-1"]
即使启用了 SCRAM-SHA-1,如果 Navicat 的 Authentication Database 字段为空或填错,仍会报错。MongoDB 不会自动 fallback 到 admin。
admin 库创建,所以这里必须填 admin
myapp 库创建,则此处填 myapp,不是 admin
启用 disableScramSHA256: true 后,所有新用户只能用 SHA-1;已有 SHA-256 用户失效,必须重建。SHA-1 虽仍被 MongoDB 官方支持,但 NIST 已建议弃用,生产环境长期使用存在合规风险。
真正干净的解法是升级 Navicat 到 v17+,它原生支持 SHA-256。但如果受限于 license 或内部策略无法升级,那服务端强制 SHA-1 就是最少改动、最高成功率的实操路径——只是别忘了,每次新建用户都得显式带 mechanisms: ["SCRAM-SHA-1"],漏掉就又连不上。