这两天在做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 3.0引入了WiredTiger存储引擎,作为默认的替代MMAPv1。WiredTiger提供了更好的数据压缩,提高了读写性能,同时降低了内存占用。这使得MongoDB在处理大量数据时更加高效,尤其是在I/O密集型工作负载中...
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
mongod --config <配置文件路径> --install ``` **2. 启动 MongoDB 3.0.15** - **服务管理**:通过 Windows 服务管理工具启动 MongoDB 服务。 - **自动启动**:设置 MongoDB 服务为自动启动。 - **测试连接**:...
7. **安全与认证**:MongoDB 3.0加强了安全性,支持SCRAM-SHA-1认证协议,可以为用户和角色设置权限,确保数据安全。 8. **聚合框架**:MongoDB提供强大的聚合框架,允许对数据进行复杂分析,类似于SQL的GROUP BY...
该压缩包可能包含了DSpace系统的核心服务组件,如metadata存储、工作流管理、权限控制等,供开发者进行安装、配置或二次开发。 描述中的"mongo-testbed.zip"则提到了MongoDB Java集成测试开发环境,MongoDB是一个...
MongoDB 3.0引入了更强大的安全权限访问控制,以增强数据库的安全性。相比于之前的版本,这个新特性对用户管理进行了重大改进,确保只有经过身份验证和授权的用户才能执行特定的操作。以下是对MongoDB 3.0安全权限...
MongoDB是一款开源、高性能、无模式的分布式文档型数据库,被广泛应用于大数据处理、Web应用、内容管理系统等场景。...正确安装和配置MongoDB 3.0,将有助于你充分利用其功能,构建高效、可靠的应用系统。
Mongo DB 3.0 工具 PHP 5.5 + php-fpm +作曲家+ imagemagick Ruby 2.0 +宝石+ Sass 节点0.10.36 + NPM +永久+约曼 phpMyAdmin: mongo-express: 实用工具 get 哥哥 树 网络工具 bzip2 吉特 停止 其他 系统...
- 注意,从MongoDB 3.0开始,如果配置服务器不指定bind-ip,它将默认绑定到本地地址(***.*.*.*),这将导致无法远程连接,所以在配置时必须指定实际的IP地址。 - 另外,从MongoDB 3.0版本起,启动配置服务器时还...
2. **设置权限**:通过命令`chmod +x /home/srit/apps/mongodb64/bin/mongodb_start.sh`设置脚本可执行权限。 3. **添加到启动项**:编辑`/etc/rc.local`文件,并在文件末尾添加如下内容: ``` /bin/su - srit -c ...
后台动态角色/权限(超级管理员可进行配置)资源文件(图片,某些学习资料)集中管理全站https化RESETful api规范化 :face_with_symbols_on_mouth:历史版本介绍都是在校的时候写的第一版是java servlet写的现在已经...
6. 安全性:尽管是32位版本,MongoDB仍需配置安全措施,包括设置权限、启用身份验证和加密网络通信。这可以通过配置文件或者在运行时指定参数来完成。 7. 监控和日志:MongoDB会记录操作日志,这对于排查问题和监控...
通常,这可以通过创建一个名为`/data/db`的目录并赋予适当的权限来完成。然后,可以将MongoDB的可执行文件路径添加到系统PATH环境变量中,以便于命令行操作。 安装完成后,启动MongoDB服务。在命令行中,你可以使用...
此外,对于生产环境,还需要配置防火墙规则、设置用户权限以及监控和调整性能参数。 总的来说,MongoDB的最新版本提供了强大的数据库解决方案,适用于各种Web应用、数据分析和大数据处理场景。在Linux环境下,通过...
MongoDB是一款开源、分布式、高...在实际应用中,你可能还需要考虑更多的细节,如配置复制集以实现高可用性,或者设置更复杂的权限控制等。了解并掌握这些知识点,将有助于你在使用MongoDB时更好地管理和保护你的数据。
在提供的文件列表中,"GNU-AGPL-3.0"可能是指MongoDB的开源许可证,这关乎软件的使用、修改和分发规则。"README"通常包含项目介绍、安装指南和使用说明,是了解MongoDB快速入门的好资源。"THIRD-PARTY-NOTICES"则...
如果没有预先创建,MongoDB在启动时会自动尝试创建,但在某些情况下可能会因为权限问题失败。 3. **配置MongoDB** MongoDB的配置文件通常命名为`mongod.cfg`,但在这个版本中可能并未包含。若未提供,可以手动创建...
确保在安装过程中遵循最佳实践,例如为MongoDB创建专门的用户和数据目录,并配置正确的权限。 分片是MongoDB中用于水平扩展的关键特性,允许你在多个服务器之间分配数据以处理大规模的数据量。文件`实战Mongo副本集...
- **WiredTiger存储引擎**:从MongoDB 3.0开始,默认存储引擎是WiredTiger,提供了更好的性能和内存管理。 - **监控和日志**:MongoDB提供丰富的监控工具和日志功能,用于性能分析和问题排查。 总之,MongoDB在...