最近做一个基于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错的解决方案的更多相关文章

  1. jenkins 配置ssh remotes 报Failed to authenticate with public key

    问题:jenkins配置ssh远程连接时候报 ERROR: Failed to authenticate with public key com.jcraft.jsch.JSchException: ...

  2. 报错:(未解决)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./ ...

  3. 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' ...

  4. redis运用连接池报错解决

    redis使用连接池报错解决redis使用十几小时就一直报异常 redis.clients.jedis.exceptions.JedisConnectionException: Could not g ...

  5. 连接mongo的服务提示:HTTP Status 500 - com.mongodb.MongoException$Network: can't call something

    连接mongo的服务提示以下错误 原因:达到了mongodb启动时预设的最大连接数,无法创建新的连接 HTTP Status 500 - com.mongodb.MongoException$Netw ...

  6. node-mongo-native1.3.19连接mongo的最优方法

    最近需要在node下连接mongo,尝试了很多方法,本文简要总结一下 选择Driver 首先,基本上有4个常见的driver供选择 1.官方的是node-mongo-native 2.基于node-m ...

  7. 关于navicat连接oracle 报 ORA-12737 set CHS16GBK错误的解决方案

    [转]关于navicat连接oracle 报 ORA-12737 set CHS16GBK错误的解决方案 昨天下载安装了navicat 9.0 Premium(高级英文版),连接mysql正常,看到他 ...

  8. Asp.Net连接Mysql报错Out of sync with server

    Asp.Net连接Mysql报错Out of sync with server 原因:程序引用的MySql.Data.dll版本高于服务器版本 解决:下载一个低版本的MySql.Data.dll,项目 ...

  9. Atom远程连接服务器报错服务器版本和客户端版本不一致

    Atom远程连接服务器 报错信息: Server version is different than client version Original error message: Version mi ...

随机推荐

  1. 三维动画形变算法(Gradient-Based Deformation)

    将三角网格上的顶点坐标(x,y,z)看作3个独立的标量场,那么网格上每个三角片都存在3个独立的梯度场.该梯度场是网格的微分属性,相当于网格的特征,在形变过程中随控制点集的移动而变化.那么当用户拖拽网格 ...

  2. Liunx软件安装之Zabbix监控软件

    Zabbix 是什么 zabbix(音同 za:bix)是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix 能监视各种网络参数,保证服务器系统的安全运营 ...

  3. python 29 Socket - 套接字

    目录 Socket - 套接字 Socket - 套接字 应用层与TCP/IP协议族通信层(或传输层)之间的抽象层,是一组接口()接收数据:当接口接收数据之后,交由操作系统: 如果数据与操作系统直接交 ...

  4. Codeforces 697D

    题意略. 思路: 对于随机产生的一个数列,对于某个儿子,其兄弟在其前面的概率为 1 / 2. 所以这个兄弟对期望的贡献为son[v] / 2,所有兄弟加起来即为(tot - 1) / 2. 详见代码: ...

  5. CopyOnWriteArrayList笔记

    CopyOnWriteArrayList笔记 一.前言 Java 5.0 在java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能. ConcurrentHashMap ...

  6. Oracle数据库测试和优化最佳实践: OTest介绍 (转)

    当前Oracle数据库最佳测试工具OTest *  Otest是用于Oracle数据库测试.优化.监控软件. *  Otest是免费提供给Oracle客户和广大DBA工程师使用的软件.由原厂技术专家王 ...

  7. C#开发BIMFACE系列1 BIMFACE 简介

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE 是什么 BIMFACE = 国内领先的BIM轻量化引擎 BIMFACE 是广联达公司旗下的一款具有完全自主知识产权的BIM轻量化 ...

  8. Bootstrap如何禁止响应式布局

    Bootstrap 会自动帮你针对不同的屏幕尺寸调整你的页面,使其在各个尺寸的屏幕上表现良好.下面我们列出了如何禁用这一特性,就像这个非响应式布局实例页面一样. 禁止响应式布局有如下几步: 移除 此 ...

  9. Bluetooth(蓝牙)连接过程分析

    一 基本概念 蓝牙的连接过程是十分重要的,特别是做蓝牙的技术人员来说,这个是十分重要的.理它的流程,是一件必修课.虽然进入蓝牙行业很久了,以前没怎么系统化的做一些事情,趁此机会,就梳理一下这里面的内容 ...

  10. JIRA使用过程出现问题整理解答

    转自:http://www.51testing.com/html/44/n-2820444.html 发表于:2015-5-28 10:22  作者:知乎   来源:51Testing软件测试网采编 ...