C#连接Mongo报Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1错的解决方案
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#连接Mongo报Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1错的解决方案,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2760字,纯文字阅读大概需要4分钟。
内容图文
![C#连接Mongo报Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1错的解决方案](/upload/InfoBanner/zyjiaocheng/708/6203d0e431734b5abe187b534b561343.jpg)
---恢复内容开始---
最近做一个基于ABP的.net Core的项目,数据库选了MongoDB,但是返现无法给数据库设置认证,只要设置了账号密码连接就报错
连接串如下:
mongodb://root:rootpassword@192.168.100.1/Webdev
已经给了root用户"__system"角色,使用Robo3T登录一切正常。但是代码就是报错
An unhandled exception occurred while processing the request. MongoCommandException: Command saslStart failed: Authentication failed.. MongoDB.Driver.Core.WireProtocol.CommandUsingQueryMessageWireProtocol<TCommandResult>.ProcessReply(ConnectionId connectionId, ReplyMessage<RawBsonDocument> reply) MongoAuthenticationException: Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1. MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelper(CancellationToken cancellationToken)
mongo是用的docker,刚开始以为是版本问题,找了个低版本的,问题依旧。各种查,baidu、bing、群里问折腾了N久。因为用的是直接基于ABP的.Net Core官方的项目,做开发,直接从ABP官网下载的,代码没动过,按道理不应该出现这样的问题。去掉验证一切正常,加上就报错。一度怀疑官网的代码有Bug,在Github确实看到有一样提出这个问题的,也没有答案。
为了排除ABP的项目有Bug,自己新建了一个干净.Net Core项目,nuget下MongoDB驱动,又一番折腾,报错是一样的,排除了是ABP的问题,甚至怀疑是不是MongoDB驱动有问题。
各种折腾后还是没有结果。最后终于想到了,查看下mongo的log,看看什么错。
用Robo3T打开Log,查看
这个有点意思了,找不到用户?看来需要为这个库添加一个root用户才行,于是输入命令:
use Webdev db.createUser( { user:"root", pwd:"password", roles:[ {role:"dbOwner", db:"Webdev"} ] } )
再次尝试,终于成功。
深入思考这个问题,root用户已经配置了"__system"角色,中间也一度配置了“dbAdminAnyDatabase”、“readWriteAnyDatabase”、“hostManager”,“dbOwner”等各种能想到的角色。按道理绝对不存在无权限访问的问题。Log的信息是说在Webdev这个库上没有“root”用户。添加后也解决了问题。说明验证的时候使用了Webdev库,而不是默认的admin库,由此想到,是否可以通过指定验证库来解决这个问题。
通过查询mongodb官方文档,找到了authSource参数,然后把连接字符串改成
mongodb://root:rootpassword@192.168.100.1/Webdev?authSource=admin
然后重新开一个docker,配置相应的用户名密码和角色,不为Webdev库设置用户。直接连接,访问成功。
结论:
mongodb访问默认是用当前访问的库作为验证,若要验证通过可以通过两种方法。
1、在连接串上指定验证库,方法就是在连接串上加上authSource=admin,一般使用admin来做验证库
2、为当前的库添加对应的账户、密码和角色,以满足默认验证库为访问库的情况。
写在最后:
1、其实这是碰到了一个弱智问题,主要还是对mongo验证机制的了解不够深入造成的。看来还是需要继续加强学习啊。
2、解决问题的思路有问题,发现问题的第一时间应该首先看Log,Log是第一手的东西,直接告诉了我们发生了什么问题,这次只看了程序Log,没有看MongoDB Log,所以没有找到核心问题。
上来就百度,看来也不一定是好办法。问了一圈也没有什么结论,最后发现是一个弱智问题,简直就是秀自己的智商下限。引以为戒!
内容总结
以上是互联网集市为您收集整理的C#连接Mongo报Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1错的解决方案全部内容,希望文章能够帮你解决C#连接Mongo报Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1错的解决方案所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。