MongoDB学习04之用户认证

本文介绍了如何在MongoDB中设置用户认证以增强安全性,包括启动服务时加入--auth参数、添加不同权限级别的用户以及如何进行用户认证操作。

     前面我们登录MongoDB时,没有使用用户帐号和密码。使用oracle或mysql的同学都习惯了使用数据库时需要用户名和密码登录,这也是数据库的一个安全措施,避免任何人都能操作数据库。MongoDB能火起来,这个登录认证的安全措施也当然不会没有。

     前面我们启动MongoDB服务时,是这样的:

    C:\mongoDB\mongod.exe --dbpath c:\mongoDB\data\db --logpath c:\mongoDB\data\log\mongoDB.log --logappend --service 

     所以我们登录数据库时(Mongo.exe)不需要输入用户名和密码就可以直接操作数据库了。现在我们改下启动的命令:

    C:\mongoDB\mongod.exe --dbpath c:\mongoDB\data\db --logpath c:\mongoDB\data\log\mongoDB.log --logappend --service --auth

     

     多加了个--auth,用于用户认证,也就是用户登录数据库时,需要通过认证才可以操作数据库(admin中如果没有任何超级用户,就算用了--auth也没用,照样可以不认证就能直接操作数据库)

      前面安装介绍时,有说到把启动添加到服务去了,那就可以到注册表里面该。

      HKEY_LOCAL_MACHINE->SYSTEM->Services->MongoDB

      先把服务停止,然后再修改

   

 

      接下来再启动服务,然后登录数据库。

      我们来登录数据库school,然后往student中插入数据.

       

     发现居然成功了,没经过任何用户认证啊。那是因为我们没添加任何用户,那我们接下来添加个用户。

     在school数据库下,添加用户,用户名school,密码school,然后退出,重新登录school,往student中加数据.

      

      我们发现居然也成功了,这是怎么回事?这是因为,我们没在admin这个库里添加任何用户(这个库下的任何用户都是超级管理员),没有超级管理员,那MongoDB就认为其他用户无效。呵呵,老大都还没有,小弟有无法扛大旗。

      那我们切换数据库到admin下,添加超级管理员admin。

      

       看上面截图,我们看到在admin下添加用户后,发现连查询都说无权限了。退出,登录school,发现查询,添加都说无权限了。说明用户起到作用了,没认证,就不能做任何操作。

       既然这样,那我们就登录school,并且认证用,试试看,能否正常使用。


      通过用户认证成功,这时有可以正常操作了。

       注:

       (1)MongoDB中,admin库状态下,超级用户登录认证后,切换到其他库(school),照样可以操作一切,作为老大是有特权的。而作为小弟呢(school用户)就只能操作自己所属的库,不能其他人的库,要安分守己。这个就不贴图说明了。

        (2)admin中存在超级用户,并且启动服务时用了--auth,而非admin库(school)库,不存在任何用户,这时,登录school库时,没有用户认证,也是无权限进行任何操作的。这时就需要在admin库下用超级用户登录后,切换到school库下创建用户才行。这个也不贴图说明了。


         如果我们用db.showCollections这个命令查看,发现没个库都存在system.users这个集合。这个集合中存放的就是每个库的用户信息。

> db.getName()
school
> db.system.users.find()
{ "_id" : ObjectId("53b3c1fcc8a04e034bdff4d0"), "user" : "school", "readOnly" :
false, "pwd" : "f1b23d70ce54974fbf58f509d08b6b9d" }
>

         看上面user信息,发现有个键值"readOnly":false,这个readOnly表示这个用户是不是只能查询,而不能进行其他操作(添加,修改,删除),true表示只有查询权限,false表示有全部权限.既然有这个键值存在,那我们创建用户时,如果不说明,默认是false.

> db.addUser('school2','school2',true)
{
        "user" : "school2",
        "readOnly" : true,
        "pwd" : "fbc615aca522fc66024a677d49b715f6",
        "_id" : ObjectId("53b3c304c8a04e034bdff4d1")
}
> db.system.users.find()
{ "_id" : ObjectId("53b3c1fcc8a04e034bdff4d0"), "user" : "school", "readOnly" :
false, "pwd" : "f1b23d70ce54974fbf58f509d08b6b9d" }
{ "_id" : ObjectId("53b3c304c8a04e034bdff4d1"), "user" : "school2", "readOnly" :
 true, "pwd" : "fbc615aca522fc66024a677d49b715f6" }
>
     用户的readOnly为true,只能执行查询操作,这个也不贴图一一说明了。

     既然能添加用户,那肯定也能删除用户,用户保存在system.users中,所以只要把它里面对于的用户删除就OK了。

    

> db.system.users.remove({'user':'school2'})
> db.system.users.find()
{ "_id" : ObjectId("53b3c1fcc8a04e034bdff4d0"), "user" : "school", "readOnly" :
false, "pwd" : "f1b23d70ce54974fbf58f509d08b6b9d" }
>
    用户被删除了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值