本地MongoDB报SCRAM-SHA-1认证失败,ASP.NET项目如何解决?
以下是针对性的解决步骤,按优先级尝试:
升级MongoDB .NET驱动版本
新版MongoDB(6.0+)默认使用SCRAM-SHA-256作为认证机制,旧版本的MongoDB.Driver可能不支持该机制,或对SCRAM-SHA-1的兼容性存在问题。打开NuGet包管理器,更新MongoDB.Driver和MongoDB.Bson到最新稳定版,确保驱动与MongoDB服务器版本兼容。调整连接字符串的认证机制参数
如果暂时无法升级驱动,可在连接字符串中明确指定使用SCRAM-SHA-1,或匹配MongoDB服务器的默认机制。示例:mongodb://username:password@localhost:27017/yourDb?authMechanism=SCRAM-SHA-1注意:若服务器默认是SCRAM-SHA-256且驱动支持,可改为
authMechanism=SCRAM-SHA-256。检查并修改MongoDB用户的认证机制
登录MongoDB Shell,执行以下命令查看目标用户的认证机制:use yourDatabase; db.getUser("yourUsername");查看返回结果中的
mechanisms字段,若不包含SCRAM-SHA-1,需重新创建用户或添加该机制:// 创建支持两种机制的用户 db.createUser({ user: "yourUsername", pwd: "yourPassword", roles: ["readWrite", "dbAdmin"], mechanisms: ["SCRAM-SHA-1", "SCRAM-SHA-256"] });若用户已存在,可使用
db.updateUser更新机制:db.updateUser("yourUsername", { mechanisms: ["SCRAM-SHA-1", "SCRAM-SHA-256"] });修改MongoDB服务器的认证机制配置
打开MongoDB的配置文件(如mongod.conf),找到security节点,添加或修改authenticationMechanisms配置,同时启用授权:security: authorization: enabled authenticationMechanisms: SCRAM-SHA-1,SCRAM-SHA-256保存配置后重启MongoDB服务,确保服务器同时支持两种认证机制。
验证连接字符串的正确性
检查用户名、密码是否正确,若密码包含特殊字符(如@、&、#),需进行URL编码(例如@转义为%40,&转义为%26)。同时确认连接字符串中指定的数据库与用户所属数据库一致。
内容的提问来源于stack exchange,提问作者Gerard Jaryczewski

