MongoDB(3.6.3)的用户认证初识
Windows 10家庭中文版,MongoDB 3.6.3,
前言
刚刚安装好了MongoDB,启动了服务器-mongod命令,启动了MongoDB shell-mongo命令,不过,全程都没有使用username、password!震惊!
原来,MongoDB默认是没有用户认证的,也没有默认用户,因此,都需要自己添加——安全全权交给用户自己负责。
不过,MongoDB里面是有强大且完备(浮夸了点,但一定是这样的,还要去了解一下去年还是什么时候发生的大量MongoDB被黑敲诈比特币的事件)的安全机制的,对于用户认证来说,目前孤所知的是可以做下面的事情(实际上还可以做更多):
-启动MongoDB服务时使用--auth启动用户认证(只是启动这个吗)
-使用db.createUser(...)添加用户
本文介绍了如何开启MongoDB的安全认证、如何添加一个用户到MongoDB的过程,因为第一天玩MongoDB,所以,不会更多深入。
说明,孤的MongoDB的bin目录已经添加到环境变量path中。
开启MongoDB安全认证
打开终端,执行下面的命令查看mongod的使用信息:
>mongod --help
可以看到General options下有一个--auth选项,介绍时run with security,在孤目前的理解来看,就是打开MongoDB的安全认证,其中包括用户认证,当然,还可能有其它认证方式。
新建文件夹mdb2dir(空白),并基于它启动MongoDB服务:使用了--auth,打开了安全认证

不过,此时MongoDB数据库中是没有用户信息的,因此,任何客户端都不能访问MongoDB服务器。使用mongo命令可以连接上,但执行命令时会提示认证错误。


此时使用db.auth(...)加各种参数也无法成功完成认证:


怎么办?添加用户先!
关掉MongoDB服务,重新使用没有--auth选项的非安全方式启动(第二行):

----
说明,启动mongo shell的输出信息只有3行,这比MongoDB没有开启安全认证时的输出信息少太多了,对比下:

说明,在上面的启动中,使用了日志记录功能,因此,可以通过日志文件查看操作过程中发生的事项(哪些日志要被记录、什么级别才被记录、怎么控制日志格式……需要看更多资料才行)。
添加用户到MongoDB
怎么添加MongoDB用户呢?看了两篇博文——一篇14年的、一篇17年的,使用db.addUser(...)添加用户。好,结果,孤的MongoDB 3.6.3已经不支持这个命令了。
使用db.help()可以看到其中有一个db.createUser(...)命令:
db.createUser(userDocument)
看时看到了,可什么事userDocument?怎么用这个命令呢?此时,mongo shell无法帮助孤获取更多这个函数的使用信息了!
又看了一遍mongo shell命令和db.help()下的命令,没有办法知道这个函数的用法。
那么,去官网找吧,更快的应该是用搜索引擎找——然后到官网。
官文Enable Auth正是孤想要的(尚未细看,就看了Create the user administrator小节,不过足够添加一个用户了,居然还涉及到角色):

上面是官文的示例截图,从结构来看,上面的语句是写到某种脚本文件中的,然后再执行脚本(JavaScript脚本?怎么执行?mongo的命令中有一个选项执行.js文件~)。
下图是自己添加用户的截图:
第一次只用了user、pwd,结果失败,提示要roles;
第二次添加成功了,新用户 名为sa,角色为userAdminAnyDatabase(孤还以为这个角色是任何数据库都可以访问的呢,结果却并非如此);

已经添加了sa用户,来验证一下:关闭mongo shell、MongoDB服务器,重新使用--auth选项打开MongoDB服务器,再使用mongo shell连接MongoDB服务器。
使用sa账号完成认证,执行一些操作的结果如下:原来角色为userAdminAnyDatabase的用户sa并不是万能的

-默认的mongo shell的db显示为test(这个test是什么?有什么用?不是数据库的啊!),故认证失败

-切换到admin数据库,sa账号认证成功

-可以执行show dbs命令,,但是,切换到local数据库时执行失败(此问题和角色有关系,也说明自己对MongoDB的这套用户权限机制不熟悉)

-在local数据库下,认证也失败,逻辑正确

-在数据库admin执行show collections失败(不应该的啊!)

说明,userAdminAnyDatabase角色从名字上看,是建立管理员权限的账号并可以访问任何数据库,可在上面的操作中,基于它的用户sa并没有实现孤的预期,甚至在admin数据库中执行show collections都失败——不应该啊!不是有这个权限吗?
在官文Built-In Roles中有对userAdminAnyDatabase的详细介绍,开始就说了,基于它角色的用户不可以访问local、config两个数据库(难道show collections的数据涉及到了这两个数据库?):

0705-1541更新:
使用不添加--auth的方式重启了MongoDB服务器,查看其中之前添加的用户sa:
最初,数据库admin下只有system.version记录集,但在添加用户sa后,多了一个system.users记录集。使用 记录集的find()命令可以查看其中所有用户信息,不过目前只有一个用户sa。

看来,需要认真看下MongoDB的用户权限管理相关官文才可以彻底了解。
参考链接
mongodb 权限设置--用户名、密码、端口(by 园友 luck_mylife)
后记
MongoDB的安全机制到底是怎样的?怎么合理地建立用户?角色也可以新建吧?
怎么建立一个超级用户?可以用它访问所有功能——当然是不安全的!
怎么建立数据库?mongo shell中没找到,只有clone、copy、repair、drop数据库的操作。
创建 记录集(表):db.createCollection
添加 记录?
删除 记录?
修改 记录?
查找 记录集 中的 对象(记录?):find()或find(...)
MongoDB的图形化管理工具是什么?MongoDB Compass?
对了,MongoDB用户怎么 修改?删除有一个dropUser(...)函数。
继续dig!
P.S.本文的干活好像并不是很多的啊!请读者见谅!
MongoDB(3.6.3)的用户认证初识的更多相关文章
- 生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)
本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/8,欢迎留言. 安装软件包:mongodb-linux-x86_64-3.4.1.tgz ...
- Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解
用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...
- 源码怎么找之rest_framework的用户认证
首先得有一点常识,比如用户认证,就是authenticate 比如一个函数,应该有返回值, 比如一个类里面的self,真的是代表本身这个类吗 再比如看到一个东西加括号,就两种情况,一种是函数,一种是类 ...
- 基于JWT标准的用户认证接口实现
前面的话 实现用户登录认证的方式常见的有两种:一种是基于 cookie 的认证,另外一种是基于 token 的认证 .本文以基于cookie的认证为参照,详细介绍JWT标准,并实现基于该标签的用户认证 ...
- Docker Mongo数据库开启用户认证
一.启动mongo容器的几种方式 #简化版 docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles #自定 ...
- 基于MongodbDB的用户认证-运维笔记
MongoDB默认是不认证的,默认没有账号,只要能连接上服务就可以对数据库进行各种操作,MongoDB认为安全最好的方法就是在一个可信的环境中运行它,保证之后可信的机器才能访问它,可能这些对一些要求高 ...
- macos下mongoDB 3.4.5 添加用户、设置权限
macos下mongoDB 3.4.5 添加用户.设置权限 在项目中需要根据项目运行环境访问,以不同的身份访问各自的db,所以研究了一下MongoDB的 需求: 给MongoDB添加两个用户分别用 ...
- Node.js 使用JWT进行用户认证
代码地址如下:http://www.demodashi.com/demo/13847.html 运行环境 该项目基于 node(v7.8.0版本以上) 和 mongodb 数据库,因此电脑上需要安装这 ...
- linux安装mongodb(设置非root用户和开机启动)
官网地址:https://www.mongodb.com/ 在官网上选择不同的linux系统得到不同的下载地址,我们用的下载地址是:https://fastdl.mongodb.org/linux/m ...
随机推荐
- 【BZOJ2957】楼房重建(线段树)
[BZOJ2957]楼房重建(线段树) 题面 BZOJ 题解 对于整个区间维护最大斜率以及只考虑这个区间的答案 考虑如何向上合并. 首先左半段的答案是一定存在的 所以,现在的问题就是右半段能够贡献的答 ...
- 针对Weblogic测试的一些小总结(转)
1. 管理员登录页面弱密码 Weblogic的端口一般为7001,弱密码一般为weblogic/Oracle@123 or weblogic,或者根据具体情况进行猜测,公司名,人名等等,再有就可以用b ...
- 彻底解决mac下terminal路径显示问题
mac 配色 mac shell配色 ~/.bash_profile是bash shell中当前登录用户的配置文件.bash是“终端”中默认的shell. alias ls=”ls -G”是给”ls ...
- java-----遇到问题------myeclipse----发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误
情况 myeclipse发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误. 这种情况一般是 .classpath文件设置的输出路径不对导致的. 1.. ...
- Razor:从aspx到cshtml常见错误及正确书写方法
http://blog.csdn.net/cheny_com/article/details/6298496 从aspx转到chshtml还是有很多要适应的地方的,本帖是个人学习笔记帖不断更新.每天开 ...
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 A. 地铁站
//其实比赛的时候就想到这方法了,但看到数据太吓人,就没写//看着标程,实际上就是这方法,太坑爹…… /* 假设值为k,对于图中任意两点,圆1半径k/t1,圆2半径k/t2 圆1与圆2的交集为可以设置 ...
- OpenCV入门指南----人脸检测
本篇介绍图像处理与模式识别中最热门的一个领域——人脸检测(人脸识别).人脸检测可以说是学术界的宠儿,在不少EI,SCI高级别论文都能看到它的身影.甚至很多高校学生的毕业设计都会涉及到人脸检测.当然人脸 ...
- HAproxy Json日志格式配置
通过日志工作分析日志时,非json日志分析起来比较麻烦.通过以下的配置,可以让生成的日志为json. log-format {"haproxy_clientIP":"%c ...
- python中的文件操作(2)
a+,w+,r+的特点: r+:r+模式允许读和写,当对文件句柄只进行写操作时,tell(),seek()为写操作的‘指针’(也就是写到seek()处). 当只进行读操作时,tell(),seek() ...
- 项目Header组件的开发注意事项
npm install stylus --save npm install stylus-loader --save 移动端一般采用rem布局方式 Header组件里iconfont的使用和代码优化: ...