您的位置:首页 > 数据库 > Mongodb

MongoDB学习04之用户认证

2014-07-02 16:34 429 查看
前面我们登录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" }
>
用户被删除了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: