本文参照:http://hi.baidu.com/tianhuimin/item/590d96cfd7ac1509c610b26a

本人也是按照此文章操作的,但是有些不妥,红色文字就是我实践后,需要改正的地方

一、关于权限的默认配置

在默认情况下,mongod是监听在0.0.0.0之上的,任何客户端都可以直接连接27017,且没有认证。这样做的好处是,用户可以即时上手,不用担心被一堆配置弄的心烦意乱。然而坏处也是显而易见,如果直接在公网服务器上如此搭建MongoDB,那么所有人都可以直接访问并修改数据库数据了。

默认情况下,mongod也是没有管理员账户的。因此除非你在admin数据库中使用db.addUser()命令添加了管理员帐号,且使用–auth参数启动mongod,否则在数据库中任何人都可以无需认证执行所有命令。包括delete和shutdown。

此外,mongod还会默认监听28017端口,同样是绑定所有ip。这是一个mongod自带的web监控界面。从中可以获取到数据库当前连接、log、状态、运行系统等信息。如果你开启了–rest参数,甚至可以直接通过web界面查询数据,执行mongod命令。

其实MongoDB本身有非常详细的安全配置准则,显然开发者也是想到了,然而他是将安全的任务推给用户去解决,这本身的策略就是偏向易用性的,对于安全性,则得靠边站了。

二、MongoDB用户类型

MongoDB的用户分为两种,一种是admin用户,另一种是特定数据库用户。admin用户拥有最高的权限,而特定数据库用户则只能访问特定的数据库。当MongoDB的admin库里没有任何用户的时候,也就是说整个MongoDB没有一个MongoDB用户的时候,即便–auth权限需求打开了,用户还是可以通过localhost界面进入MongoDB进行用户设置,否则的话整个MongoDB就完全没法访问了。而当这个用户创建完成之后,之后的用户登录和操作就需要授权了,不是直接登录就能使用的了。

MongoDB有一个比较奇怪的设置是,即便是一个admin用户,授权也必须在admin数据库下进行,而不能在其他数据库下进行。而授权之后admin用户就可以在任何数据库下进行任何操作了。当然数据库级别的用户在他自己的数据库下授权之后是不能到其他数据库进行操作的。举例来说:

> use test
    > db.auth(“someAdminUser”, password)

操作失败,提示还没有在admin数据库下对afmin用户进行授权。

三、操作实例

启动MongoDB,在cmd命令框里进入数据库的bin目录;

1. 输入命令:show dbs,你会发现它内置有两个数据库,一个名为admin,一个名为local;本文只对admin库进行描述

2. 输入命令:use admin,你会发现该DB下包含了一个名为system.user的collection,这是用户表,用来存放超级管理员的

备注:本文使用的数据库版本是2.0.1,没有默认的admin数据库,但是在执行第二步之后自动创建了一个admin库; 当然也没有默认的system.user表,运行后面的第三步后会自动创建 system.user和system.indexes )

3. 输入命令:db.addUser('root','root'),这里我添加一个超级管理员用户,username为root,password也为root。先退出 (ctrl+c)程序,测试重启服务后再次连接MongoDB是否需要按提示输入用户名、密码进行操作。

4. 输入命令:use admin

5. 输入命令:show collections,查看该库下所有的表,你会发现,MongoDB并没有提示你输入用户名、密码,原因是,在文章最开始提到了,MongoDB默认设置为无权限访问限制,我们需要先把它设置成为需要权限访问

6.从新打开cmd,在mongodb路径的bin目录下,执行mongod --dbpath  d:\work\data\mongodb\db  --auth

7. 输入命令:use admin

8. 输入命令:show collections,提示:"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1"

显然,已经提示没有权限;用刚才设置的用户名、密码来访问集合

9. 输入命令:db.auth(“root”,”root”),输出一个结果值为1,说明这个用户匹配上了,如果用户名、密码不对,输出为0

10. 输入命令:show collections,将成功显示结果

继续操作,可以访问已经存在的数据库,但对于新建的数据库仍然没有权限;继续操作,先退出(ctrl+c)服务

11. 输入命令:mongo TestDB

12. 输入命令:show collections,提示:没有权限

13. 输入命令:db.auth(“root”, “root”),输出结果为0,说明用户名或者密码有问题,刚刚前面才创建,怎么会不对呢?原因在于:当我们单独访问MongoDB的数据库时,需要权限访问的情况下,用户名密码并非超级管理员,而是该库的system.user表中的用户,注意,我这里说的是单独访问的情况,什么是不单独访问的情况呢?后面再讲。针对上述情况,接下来操作:

14. 输入命令:db.addUser('test','111111'),仍然提示没有权限,新的数据库使用超级管理员也无法访问,创建用户也没有权限,不过即然设定了超级管理员用户,那它就一定有权限访问所有的库

15. 输入命令:use admin

16. 输入命令:db.auth(“root”, “root”)

17. 输入命令:use TestDB

18. 输入命令:show collections,之后可以利用超级管理员用户访问其它库了,这个就是不单独访问的情况。在上述操作过程中,我们是先进入admin库,再转到其它库来的,admin相当于是一个最高级别用户所在的区域,对数据库操作,需要经过最高级别用户,之后可以创建每个数据库的用户。

19. 输入命令:db.addUser('test','12345'),我们给TestDB库添加一个用户,以后每次访问该库,我都使用刚刚创建的这个用户,我们先退出(ctrl+c)

20. 输入命令:mongo TestDB

21. 输入命令:show collections,提示没有权限

22. 输入命令:db.auth('test','12345'),输出结果1,用户存在,验证成功

23. 输入命令:show collections,成功显示结果

四、启动和关闭MongoDB的各种参数

详见:http://blog.csdn.net/pgwindwind/article/details/8005262

比如要改变MongoDB的默认端口,则可以这样使用--port参数:

打开cmd,在mongodb路径的bin目录下,执行mongod --port 50107 --dbpath  d:\work\data\mongodb\db  --auth

这样访问MongoDB就是以50107的端口访问了

MongoDB的使用学习之(四)权限设置--用户名、密码、端口==的更多相关文章

  1. windows下mongodb设置用户名密码&用python连接

    环境: 主机:WIN10 python版本:3.5 mongodb版本:3.4.2 开发环境:pyCharm mongodb设置用户名密码: 编写mongodb配置文件mongodb.confdbpa ...

  2. mongodb 权限设置--用户名、密码、端口

    转自:http://www.cnblogs.com/valor-xh/p/6369432.html 一.关于权限的默认配置 在默认情况下,mongod是监听在0.0.0.0之上的,任何客户端都可以直接 ...

  3. 你的MongoDB Redis设置用户名密码了吗?看看shodan这款邪恶的搜索引擎吧!~

    早上看新闻的时候看到了个醒目的新闻 开源中国:MongoDB 赎金事件持续发酵,究竟是谁之过? 博客园:MongoDB数据库勒索,中国受害者数量超乎你的想象,SOS! 1. 由于自己之前做过的项目,R ...

  4. ACTIVEMQ主题、队列设置用户名密码

    修改文件%ACTIVEMQ_BASE%/conf/activemq.xml,用户名密码储存在文件%ACTIVEMQ_BASE%/conf/credentials.properties中, active ...

  5. ElasticSearch设置用户名密码访问

    版本号:7.3.1 1.需要在配置文件中开启x-pack验证, 修改config目录下面的elasticsearch.yml文件,在里面添加如下内容,并重启. xpack.security.enabl ...

  6. 创建一个MongoDB数据库再到配置成Window服务再设置用户名密码

    1.安装MongoDB数据在官网下载安装 然后在C盘找到C:\Program Files\MongoDB\Server\4.0\bin这个可执行目录 使用cmd进入到这: 2.在C盘根目录创建一个名为 ...

  7. Ubuntu菜鸟入门(十四)—— 设置root密码

    sudo su - 输入你的账户的密码 passwd 输入新的root密码 再次输入新的root密码

  8. mongodb3 设置用户名密码 ,linux

    --29T09:: I CONTROL [initandlisten] ** WARNING: You are running on a NUMA machine. --29T09:: I CONTR ...

  9. Spring Boot druid监控页添加登录访问权限(用户名+密码)

    需求 druid作为数据源的一名后起之秀,凭借其出色的性能,渐渐被大家使用.当然还有他的监控页面也有这非常大的作用.但是监控页面往往包含了很多隐私的数据信息,所以需要将其保密,所以可以为监控页面添加一 ...

随机推荐

  1. yield return的使用。。。

    因为要取两个集合不同的元素,所以写了个拓展方法,用到了yield这个关键字,然后就学习了一波.先上代码 public static IEnumerable<T> NoRetainAll&l ...

  2. 20道JS原理题助你面试一臂之力!(转)

    20道JS原理题助你面试一臂之力! 前言 本文针对目前常见的面试题,仅提供了相应的核心原理及思路,部分边界细节未处理.后续会持续更新,希望对你有所帮助. 1. 实现一个call函数 // 思路:将要改 ...

  3. Redis大key的发现与删除方法全解析

    个推作为国内第三方推送市场的早期进入者,专注于为开发者提供高效稳定的推送服务,经过9年的积累和发展,服务了包括新浪.滴滴在内的数十万APP.由于我们推送业务对并发量.速度要求很高,为此,我们选择了高性 ...

  4. python数据类型之可hash,不可hash

    可变类型的数据不可哈希,如list,字典:同值不同址,不同值同址   列表,字典可变, 数值.字母.字符串.数字.元组不可变:同值同址,不同值不同址 怎么判断可变不可变 ?   总结:改个值 看id是 ...

  5. E: 错误,pkgProblemResolver::Resolve 发生故障,这可能是有软件包被要求保持现状的缘故。 E: 无法更正依赖关系

    mentohust:i386 已经是最新的版本了. 您可能需要运行"apt-get -f install"来纠正下列错误: 下列软件包有未满足的依赖关系:  mentohust:i ...

  6. centos7 ngxin启动失败:Job for nginx.service failed(80端口被占用的解决办法)

    问题描述:(flaskApi) [root@67 flaskDemo]# service nginx start Redirecting to /bin/systemctl start nginx.s ...

  7. Eclipse 添加Hibernate 插件

    打开Eclipse, Help-->Eclipse Marketplace   在搜索框输入JBoss-Tools ,回车   根据搜索结果选择与自己Eclipse版本匹配的JBoss,然后点击 ...

  8. Java多线程学习——join方法的使用

    join在线程里面意味着“插队”,哪个线程调用join代表哪个线程插队先执行——但是插谁的队是有讲究了,不是说你可以插到队头去做第一个吃螃蟹的人,而是插到在当前运行线程的前面,比如系统目前运行线程A, ...

  9. Pytorch迁移学习

    环境: Pytorch1.1,Python3.6,win10/ubuntu18,GPU 正文 Pytorch构建ResNet18模型并训练,进行真实图片分类: 利用预训练的ResNet18模型进行Fi ...

  10. 【Qt开发】Qt测试计算时间

    方法1 利用QTime,其精度为ms级 </pre><pre code_snippet_id="1852215" snippet_file_name=" ...