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)

官文Enable Auth

官文Built-In Roles

后记

MongoDB的安全机制到底是怎样的?怎么合理地建立用户?角色也可以新建吧?

怎么建立一个超级用户?可以用它访问所有功能——当然是不安全的!

怎么建立数据库?mongo shell中没找到,只有clone、copy、repair、drop数据库的操作。

创建 记录集(表):db.createCollection

添加 记录?

删除 记录?

修改 记录?

查找 记录集 中的 对象(记录?):find()或find(...)

MongoDB的图形化管理工具是什么?MongoDB Compass?

对了,MongoDB用户怎么 修改?删除有一个dropUser(...)函数。

继续dig!

P.S.本文的干活好像并不是很多的啊!请读者见谅!

MongoDB(3.6.3)的用户认证初识的更多相关文章

  1. 生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)

    本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/8,欢迎留言. 安装软件包:mongodb-linux-x86_64-3.4.1.tgz ...

  2. Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解

    用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...

  3. 源码怎么找之rest_framework的用户认证

    首先得有一点常识,比如用户认证,就是authenticate 比如一个函数,应该有返回值, 比如一个类里面的self,真的是代表本身这个类吗 再比如看到一个东西加括号,就两种情况,一种是函数,一种是类 ...

  4. 基于JWT标准的用户认证接口实现

    前面的话 实现用户登录认证的方式常见的有两种:一种是基于 cookie 的认证,另外一种是基于 token 的认证 .本文以基于cookie的认证为参照,详细介绍JWT标准,并实现基于该标签的用户认证 ...

  5. Docker Mongo数据库开启用户认证

    一.启动mongo容器的几种方式 #简化版 docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles #自定 ...

  6. 基于MongodbDB的用户认证-运维笔记

    MongoDB默认是不认证的,默认没有账号,只要能连接上服务就可以对数据库进行各种操作,MongoDB认为安全最好的方法就是在一个可信的环境中运行它,保证之后可信的机器才能访问它,可能这些对一些要求高 ...

  7. macos下mongoDB 3.4.5 添加用户、设置权限

    macos下mongoDB 3.4.5 添加用户.设置权限   在项目中需要根据项目运行环境访问,以不同的身份访问各自的db,所以研究了一下MongoDB的 需求: 给MongoDB添加两个用户分别用 ...

  8. Node.js 使用JWT进行用户认证

    代码地址如下:http://www.demodashi.com/demo/13847.html 运行环境 该项目基于 node(v7.8.0版本以上) 和 mongodb 数据库,因此电脑上需要安装这 ...

  9. linux安装mongodb(设置非root用户和开机启动)

    官网地址:https://www.mongodb.com/ 在官网上选择不同的linux系统得到不同的下载地址,我们用的下载地址是:https://fastdl.mongodb.org/linux/m ...

随机推荐

  1. Mybatis笔记六:Mybatis中SqlSessionFactoryBuilder/SqlSessionFactory/SqlSession/映射器实例的作用域(Scope)和生命周期

    SqlSessionFactoryBuilder 这个类可以被实例化.使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了.因此 SqlSessionFactoryBuilder ...

  2. 【BZOJ2654】Tree(凸优化,最小生成树)

    [BZOJ2654]Tree(凸优化,最小生成树) 题面 BZOJ 洛谷 题解 这道题目是之前\(Apio\)的时候写的,忽然发现自己忘记发博客了... 这个万一就是一个凸优化, 给所有白边二分一个额 ...

  3. 【CF438E】小朋友和二叉树 解题报告

    [CF438E]小朋友和二叉树 Description ​ 我们的小朋友很喜欢计算机科学,而且尤其喜欢二叉树. ​ 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\dots,c_n\). ...

  4. WEB入门.七 CSS布局模型

    学习内容 标准文档流 流动模型(flow model) 浮动模型(float model) CSS基本布局 能力目标 理解标准文档流 使用流动模型实现页面布局 使用浮动模型实现页面布局 掌握常用CSS ...

  5. bzoj 4451 : [Cerc2015]Frightful Formula FFT

    4451: [Cerc2015]Frightful Formula Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 177  Solved: 57[Sub ...

  6. bzoj 3779: 重组病毒

    一道好题~~ 一个点到根传染需要的时间是这段路径上不同颜色的数目,一个点子树到根平均传染时间就是加权平均数了(好像是废话). 所以只要用线段树维护dfs序就这个可以了,换根的话一个点的子树要么在dfs ...

  7. 【arc073D】Many Moves

    Portal -->arc073D Description ​ 有\(n\)个格子,编号从左到右为\(1\sim n\),一开始有两个棋子,位置给定,接下来要依次进行\(Q\)次操作,第\(i\ ...

  8. python小专题——urllib2模块

    Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 库的使用细节. 1 P ...

  9. NIN (Network In Network)

    Network In Network 论文Network In Network(Min Lin, ICLR2014). 传统CNN使用的线性滤波器是一种广义线性模型(Generalized linea ...

  10. navicat执行大容量的.sql文件时的设置

    如果有主外键关联等,执行报错,则去掉中间的对勾保留第三个对勾试试.第三个对勾 是 手动提交(不自动提交,估计是全部导入到数据库中之后再一起提交,而不是导入一条sql语句就提交一次) 如果同时不勾选第2 ...