这两天在做mongo权限配置的事情,在做之前根本没想到mongo权限是那么的复杂,且中间还掺杂这版本之间的不同,导致我花了前天、昨天(到今天凌晨)整整两天才把这件事解决。
首先,我花了一天的时间了解了mongo的权限问题,当觉得了解的差不多时,在昨天开始着手新建用户的事。我在生产环境上使用之前创建的userAdminAnyDatabase角色创建了一个用户,
并只给用户配置了只读权限,当在shell(就是mongo自带的shell)中配置好之后,我在shell中验证是该用户的账号密码,结果是通过的,但当我将账号用在robomonogo上登录时,却怎么也无法登陆。很奇怪,是吧?当时真的很恼火,心中怒骂这mongo是什么玩意。抱怨归抱怨,问题还是要解决的。我就一次一次尝试在robomono上登陆,不行,不行,还是不行,就在这是突然我看到了我的secureCRT上打印的mongo日志显示Failed to authenticate desktopRead@admin with mechanism MONGODB-CR,这让我想起了mongo的验证机制有几种方式,MONGODB-CR是其中一种,莫非是验证机制不对?我立马使用shell调用了相关命令:use admin;db.system.users.find()屏幕上显示的是desktopRead使用的是SCRAM-SHA-1验证机制,哇,问题找到了。这可把我高兴坏了。问题原因就是创建的用户是基于SCRAM-SHA-1验证机制的(这是3.0的默认验证机制),但robomongo使用的是MONGODB-CR验证机制,当然无法验证通过了。
于是我想到了两种办法来解决这个问题:1、升级robomongo,让其使用SCRAM-SHA-1验证机制,毕竟最新的mongo默认就是这个,这个是我比较偏好的解决方案 2、在创建用户时指定是MONGODB-CR验证机制,这样就无需升级robomongo了。基于这两种方案我开始了继续探索。
首先我是从第一种方案来开始探索的:robomongo升级。然后我从网上寻找最新的robomongo,另我失望的是,我现在使用的就是最新版(mongo3.0是今年才出来的,robomongo没来得及针对新版mongo做开发)。我在想,不升级robomongo是小事,大不了我用其他支持SCRAM-SHA-1验证机制的工具,但令我担忧的事是,现在项目中用到的用户是基于MONGODB-CR的,不知道mongo驱动是否支持SCRAM-SHA-1。于是我又开始继续探索,由于我们的项目用的是grails(一种web 开发框架,是在spring、hibernate做了一次封装),orm用的是mongodb gorm,查看其配置文件,根本没有有关配置验证机制的字段。但他可以通过connectionString(这是mongo driver的写法)来配置连接,且connectString可以传递参数authMechanism。哈哈,似乎找到了解决办法,立马尝试一下,如我配置了connectionString=“mongodb://desktopRead:123456@localhost:27017/test?authMechanism=SCRAM-SHA-1&authSource=test”.遗憾的是,启动项目报错,不支持SCRAM-SHA-1验证机制,查看了mongo driver版本,是2.12.3,而authMechanism是在2.4开始支持。于是我想升级mongodb gorm,但目前项目中用到的已是最新的,那可不可以单独升级mongo driver呢?貌似这条路最终能否凑效,单独更换mongo driver是唯一的出路,但我没尝试,因为我怕单独升级mongo driver会出很多问题,为保险起见,我决定放弃这种方案,开始探索第二种,但后面的经历也是痛苦的,好在最后解决。
针对第二种方案,则需要创建用户时指定是MONGODB-CR验证机制。但创建用户的命令或函数没有地方可以传用户验证机制的。怎么办?或许在启动mongo时可以传递这个参数,果然有个参数--setParameter authenticationMechanisms=?是可以传递验证机制的。比如我用mongod --setParameter authenticationMechanisms=MONGODB-CR --auth启动服务,但创建的用户还是SCRAM-SHA-1的。启动不行,那客户端是否可以呢?于是又查阅了文档,mongo命令是可以传--authenticationMechanism arg,但这个也无法凑效。然后我用baidu搜索,进入到这个链接https://jira.mongodb.org/browse/SERVER-17459。看完了之后,我喜出望外,总于给我找到了解决办法:降低authmechanism 。使用的命令是:var schema = db.system.version.findOne({"_id" : "authSchema”}) ;schema.currentVersion = 3 ;db.system.version.save(schema) ,这次创建的用户是基于MONGODB-CR的。问题终于解决了,这让我对baidu稍微有了感激之情,之前是非常鄙视他的,搜索出的答案要么是广告多,要么是答非所问。
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
后续:之后我开始配置权限,配置了只读权限,使用robomongo登陆,验证是否不能更新,但令我错愕的是,居然更新成功了,“妈蛋,这mongo是什么玩意,权限控制也太垃圾了吧!”。至此,已是晚上十一点多了,虽然搞定了用户验证问题,但却止于权限控制上,“看似今天没法解决了”,我心想着。所以我决定起来走走,打打台球(我当时还在公司)。打了两局都输了,很懊恼,就不打了。回到座位上,看着那个快要解决而又没解决的问题,更懊恼。但回到座位后,脑子似乎清醒了很多,突然想到了,我没使用验证模式开启mongo。我做了最后尝试,使用验证模式开启,使用只读用户登陆,无法做更新操作。“哈哈哈,终于成功了”。
相关推荐
近期学习MongoDb 需要查看API,可是官方只能从浏览器查询,没有办法下载,并且程序安装包中也没有docs。让我很是纠结,该文件是我自己爬虫、打包并制作成CHM贡献给大家。
很多公司或者机构现在对安全要求很高,但是很少由对应的资源会描述这些配置,mongo主从、mongo双主的配置随处可见,但是包含权限验证的很少,本附件会描述如何配置docker-compose的配置,最简化mongo主从的配置
mongo-java-driver-3.4.1.jar ...补充说明:mongo服务器把那本只有安装3.0以上的都可以 mongo-java-driver 3.0之前 Mechanism:默认是 MONGODB-CR mongo-java-driver 3.0之后 Mechanism:默认是 SCRAM-SHA-1
mongodb3.0.4linux安装报
要求节点重击使用 mongos SSH 访问远程服务器用法下载索引要接收包含给定数据库索引的 JSON 文档,请使用适当的配置修改download_index.sh文件 USER=$(whoami) #User running commandREMOTE_HOST='' #Remote host ...
指定额外的命令行选项来连接Mongo shell到部署Mongodb服务器, 如–host 3、创建的用户管理员 use admin db.createUser( { user: “myUserAdmin”, pwd: “abc123”, roles: [ { role: “userAdminAnyDatabase”, ...
mongo-java-driver-3.0.rar
Mongo 3.0 使用必备
NoSQL.Manager.for.MongoDB.v.3.1.0.5, mongo 3.0 数据库可视化访问工具
mongo配置文件
NULL 博文链接:https://solid210.iteye.com/blog/1474672
这将启动一个绑定到默认mongo端口的容器。 mongodb1: image: hpess/mongodb environment: - noprealloc=true - smallfiles=true ports: - "27017:27017" - "28017:28017"性能调整容器将在启动时自动尝试应用一些...
启动mongodb配置文件
基于arm64架构的mongo3.4.24安装包
阿里mongo同步工具mongo-shake
可以参考下,项目实战用到的!分享帮助你,也帮助了我!欢迎补充!
mongoVUE.1.6.9.破解文件,解压后覆盖安装目录中的MongoVUE.exe文件 安装文件下载地址:http://www.mongovue.com/downloads/
mongo的配置文件路劲:\resources\config\mongoDb.xml (此文件中 注释的配置为2.X版本的配置。 不是注释的代码为3.X的版本) demo路径:mongo3\src\cn\sky\tian\test\controller\MongoDbDao301 为调用3.X版本的服务端...
Mongo数据库连接工具,带破解批处理文件.3T支持的mongo功能很多
Kubernetes上的Mongo 这是一个Kubernetes配置项目,用于部署和运行MongoDB和... 配置为Opaque类型的Mongo秘密配置文件,其中包含mongo-root-username和mongo-root-password kubectl apply -f deploy/mongo/secrets.y