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. metasploit出错信息:can't allocate memory

    出现不能分配内存的原因: 1.postgresql服务未启动 启动服务 service postgresql start 2.虚拟机内存分配过小,如:512M 将kali虚拟机的内存扩展到1G 出错图 ...

  2. java多线程 -- 线程八锁

    一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些 ...

  3. Kotlin入门简介

    Kotlin的“简历” 来自于著名的IDE IntelliJ IDEA(Android Studio基于此开发) 软件开发公司 JetBrains(位于东欧捷克) 起源来自JetBrains的圣彼得堡 ...

  4. BZOJ 3438 小M的作物 & BZOJ 1877 [SDOI2009]晨跑

    我由衷地为我的朋友高兴.哈哈,yian,当你nick name破百上千时,再打“蒟蒻”就会被打的. 好的,说正事吧.请注意,这还是题解.但我发现,网络流实在是太套路了(怪不得这两年几乎销声匿迹).我们 ...

  5. win10不能被远程解决方案(开启远程桌面,防火墙仍不能被远程解决方案)

    开启远程桌面,防火墙仍不能被远程解决方案 1.“Win+R”→“gpedit.msc” 2.依次展开“计算机配置”→“管理模版”→“系统”→“凭据分配”→找到“允许分配保存的凭据用于仅NTLM服务器身 ...

  6. java基础-Arrays类常用方法介绍

    java基础-Arrays类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Array类的概念 此类包含用来操作数组(比如排序和搜索)的各种方法.需要注意,如果指定 ...

  7. python日记---day1

    Life is  short,Test in  python 一.输入输出 1.用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world' print('h ...

  8. 第二回 C#和JAVA 语法差异性对比

    1.继承  C#用 :  java用 extends 继承父类   implements 2.Java : 一个源文件中只能有一个public类  可以有多个非public类  源文件的名称应该和pu ...

  9. urllib模块和urllib2模块的区别

    一开始我以为urllib2模块单纯是urllib模块的升级版,因为我看到它们都有urlopen方法,但是经过查找资料,发现两者差别还是很大的. 这是我在网上看到的总结: urllib2可以接受一个Re ...

  10. [hadoop]hadoop2.6完全分布式环境搭建

    在经过几天的环境搭建,终于搭建成功,其中对于hadoop的具体设置倒是没有碰到很多问题,反而在hadoop各节点之间的通信遇到了问题,而且还反复了很多遍,光虚拟机就重新安装了4.5次,但是当明白了问题 ...