MongoDB 认证失败(错误码 18)分析与解决方案
MongoDB 认证失败(错误码 18)通常与身份验证配置或凭据问题相关。错误码 18 对应的完整描述为 AuthenticationFailed,表明客户端提供的凭据未能通过服务端的验证。以下是常见原因及解决方法。
原因一:用户名或密码错误
认证失败的最常见原因是用户名或密码输入错误。MongoDB 不会提示具体是用户名还是密码错误,需逐一排查。
验证方法:
// 使用正确的连接字符串格式
const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb://username:password@host:port/database?authSource=admin";
MongoClient.connect(uri, function(err, client) {
if (err) {
console.error("认证失败:", err);
return;
}
console.log("连接成功");
client.close();
});
注意事项:
- 密码中包含特殊字符时需进行 URL 编码。
- 检查用户名是否包含在目标数据库的
authSource中(默认为admin)。
原因二:认证机制不匹配
MongoDB 支持多种认证机制(如 SCRAM-SHA-1、SCRAM-SHA-256),若客户端与服务端配置不一致会导致失败。
解决方法:
- 查询服务端支持的认证机制:
mongod --auth --setParameter authenticationMechanisms=SCRAM-SHA-1,SCRAM-SHA-256 - 客户端显式指定机制:
const uri = "mongodb://username:password@host:port/database?authMechanism=SCRAM-SHA-256";
原因三:数据库权限未正确配置
用户可能未在目标数据库中被授予角色,或角色权限
1万+

被折叠的 条评论
为什么被折叠?



