C#连接Mongo报Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1错的解决方案
最近做一个基于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:"rootpassword",
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错的解决方案的更多相关文章
- jenkins 配置ssh remotes 报Failed to authenticate with public key
问题:jenkins配置ssh远程连接时候报 ERROR: Failed to authenticate with public key com.jcraft.jsch.JSchException: ...
- 报错:(未解决)Opening socket connection to server master/192.168.52.26:2181. Will not attempt to authenticate using SASL (unknown error)
报错背景: CDH集群中,将kafka和Flume整合,将kafka的数据发送给Flume消费. 启动kafka的时候正常,但是启动Flume的时候出现了报错现象. 报错现象: DH--.cdh5./ ...
- PHP连接MySQL报错:SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket 'MySQL' (2)
如下所示,PHP连接MySQL报错: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket 'MySQL' ...
- redis运用连接池报错解决
redis使用连接池报错解决redis使用十几小时就一直报异常 redis.clients.jedis.exceptions.JedisConnectionException: Could not g ...
- 连接mongo的服务提示:HTTP Status 500 - com.mongodb.MongoException$Network: can't call something
连接mongo的服务提示以下错误 原因:达到了mongodb启动时预设的最大连接数,无法创建新的连接 HTTP Status 500 - com.mongodb.MongoException$Netw ...
- node-mongo-native1.3.19连接mongo的最优方法
最近需要在node下连接mongo,尝试了很多方法,本文简要总结一下 选择Driver 首先,基本上有4个常见的driver供选择 1.官方的是node-mongo-native 2.基于node-m ...
- 关于navicat连接oracle 报 ORA-12737 set CHS16GBK错误的解决方案
[转]关于navicat连接oracle 报 ORA-12737 set CHS16GBK错误的解决方案 昨天下载安装了navicat 9.0 Premium(高级英文版),连接mysql正常,看到他 ...
- Asp.Net连接Mysql报错Out of sync with server
Asp.Net连接Mysql报错Out of sync with server 原因:程序引用的MySql.Data.dll版本高于服务器版本 解决:下载一个低版本的MySql.Data.dll,项目 ...
- Atom远程连接服务器报错服务器版本和客户端版本不一致
Atom远程连接服务器 报错信息: Server version is different than client version Original error message: Version mi ...
随机推荐
- NDK Cmake
CMake与NDK搭配使用时,可以配置的部分变量: 1. `ANDROID_PLATFORM`:指定Android的目标版本,对应`$NDK/platforms/`目录下的版本.通常情况下是`defa ...
- vscode 代码补全工具之aiXcoder
突然发现了一个好用的代码补全工具,与人工智能相关,具有自学习能力,据说用的越久补全效果越好,可以帮助我们节省掉好多敲代码的时间,所以这么好的工具当然要分享给大家了.废话不多说,直接上vscode的安装 ...
- JMeter用户参数
压测的时候,经常需要使用动态参数,即每次请求的参数不一样,这样才能更好的模拟真实的用户请求,我们首先能想到的也是最常见的就是用户ID 1. 用户参数 我们可以定义一个变量,然后指定多个值,这样每次请 ...
- jvm系列(六):Java服务GC参数调优案例
本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响. 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题. ...
- Filter(过滤器)(有待补充)
Filter(过滤器) 一.Filter(过滤器)简介 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的 ...
- Leetcode之二分法专题-744. 寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target)
Leetcode之二分法专题-744. 寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target) 给定一个只包含小写字母的有序数组letters ...
- MSIL实用指南-生成while语句
本篇讲解怎样生成while语句.while语句是编程语言中很重要的循环语句,它的结构是while(<表达式>) <语句或语句块> 当表达式的结果为true时就一直执行语句或语句 ...
- 谈谈我对SOFA模块化的理解
今天我们谈谈SOFA模块化,首先看一段SOFA的介绍: SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架,它在Spring Boot的基础上,提供了诸如 Readiness Che ...
- ACM-数论-广义欧拉降幂
https://www.cnblogs.com/31415926535x/p/11447033.html 曾今一时的懒,造就今日的泪 记得半年前去武大参加的省赛,当时的A题就是一个广义欧拉降幂的板子题 ...
- mysql安装-yum方式
1.环境 查看当前系统环境,使用的是 centos release 6.5 (Final). 2.检查当前系统是否已经安装过mysql rpm -qa | grep mysql 3.如果有,那么删除已 ...