使用C# MongoDB Driver 2.9.1连接带账号密码的MongoDB认证失败
解决MongoDB Driver 2.9.1认证失败(SCRAM-SHA-1)的问题
我来帮你一步步排查和解决这个认证异常问题:
先修正连接字符串的关键问题
你的连接字符串mongodb://usre1:123@localhost/GSCADB存在两个容易忽略的问题:
- 用户名拼写错误:
usre1大概率是user1的笔误,这种小失误直接会导致认证失败,先确认用户名是否正确。 - 缺少必要的认证参数:MongoDB Driver 2.9.1需要明确指定认证数据库和认证机制,尤其是当用户不是在
admin数据库下创建的时候。
修正后的连接字符串可以改成这样:
var client = new MongoClient($"mongodb://user1:123@localhost:27017/GSCADB?authSource=GSCADB&authMechanism=SCRAM-SHA-1");
- 补充了默认端口
27017,避免因端口配置不一致导致连接问题 authSource=GSCADB指定用户所在的数据库(如果你的用户是在admin库创建的超级用户,就改成authSource=admin)authMechanism=SCRAM-SHA-1明确指定认证机制,确保和Driver 2.9.1版本兼容
确认MongoDB用户的配置是否正确
确保你的用户是在目标数据库下创建的,并且拥有足够的权限。可以在MongoShell中执行以下命令创建/验证用户:
use GSCADB // 创建用户(如果还没创建) db.createUser({ user: "user1", pwd: "123", roles: [{ role: "readWrite", db: "GSCADB" }] }) // 验证用户权限 db.auth("user1", "123")
如果执行db.auth返回1,说明用户配置没问题。
检查MongoDB服务器的认证启用状态
确认你的MongoDB服务器已经开启了认证功能:
- 命令行启动时,需要添加
--auth参数 - 配置文件启动时,需要确保
security.authorization设置为enabled
如果服务器没有启用认证,带用户名密码的连接请求反而会触发认证异常。
顺便优化你的查询代码
你当前的计数方式collection.Find(new BsonDocument()).ToList().Count会把所有文档加载到内存后再计数,数据量大时性能极差。推荐使用服务器端计数的方法:
int TotalFiles = (int)collection.CountDocuments(new BsonDocument());
内容的提问来源于stack exchange,提问作者Codey
相关产品推荐
相关产品推荐

