MongoDB的使用学习之(四)权限设置--用户名、密码、端口==

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

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

1、关于权限的默认配置数据库

   在默认状况下,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自己有很是详细的安全配置准则,显然开发者也是想到了,然而他是将安全的任务推给用户去解决,这自己的策略就是偏向易用性的,对于安全性,则得靠边站了。ui

    2、MongoDB用户类型spa

   MongoDB的用户分为两种,一种是admin用户,另外一种是特定数据库用户。admin用户拥有最高的权限,而特定数据库用户则只能访问特定的数据库。当MongoDB的admin库里没有任何用户的时候,也就是说整个MongoDB没有一个MongoDB用户的时候,即使–auth权限需求打开了,用户仍是能够经过localhost界面进入MongoDB进行用户设置,不然的话整个MongoDB就彻底无法访问了。而当这个用户建立完成以后,以后的用户登陆和操做就须要受权了,不是直接登陆就能使用的了。.net

MongoDB有一个比较奇怪的设置是,即使是一个admin用户,受权也必须在admin数据库下进行,而不能在其余数据库下进行。而受权以后admin用户就能够在任何数据库下进行任何操做了。固然数据库级别的用户在他本身的数据库下受权以后是不能到其余数据库进行操做的。举例来讲:rest

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

    操做失败,提示尚未在admin数据库下对afmin用户进行受权。

   3、操做实例

   启动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,成功显示结果

4、启动和关闭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的端口访问了

相关文章
相关标签/搜索