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这个集合。这个集合中存放的就是每个库的用户信息。
看上面user信息,发现有个键值"readOnly":false,这个readOnly表示这个用户是不是只能查询,而不能进行其他操作(添加,修改,删除),true表示只有查询权限,false表示有全部权限.既然有这个键值存在,那我们创建用户时,如果不说明,默认是false.
既然能添加用户,那肯定也能删除用户,用户保存在system.users中,所以只要把它里面对于的用户删除就OK了。
前面我们启动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" } >用户被删除了。
相关文章推荐
- mongo db 学习笔记 之二: mongodb 用户认证
- 转:实例学习PHP程序对用户身份认证实现两种方法
- 转:实例学习PHP程序对用户身份认证实现两种方法
- MongoDB学习之--安全和认证
- 【Mongodb】用户和认证 权限总结
- Mars Android视频学习笔记——03_03/04_用户定位
- 基于网络用户的身份认证----学习
- H3C 三层交换机添加本地认证用户并应用到telnet[HCNA-HNTD-学习]
- MongoDB 学习笔记(六):备份与用户管理
- 【Mongodb】用户和认证 权限总结
- Mongodb用户和认证 权限总结
- Mysql源码学习——用户认证原理与实现
- 简单的给mongodb添加用户和认证
- 今天用MongoDB给用户做了个小插件,借鉴于实战开发 【零基础学习,附完整Asp.net示例】 写的非常不错
- MongoDB学习之--安全和认证
- Mongodb用户和认证 权限总结
- 学习 jForum笔记 四ForumAction 发现用户认证模板 .
- MongoDB增加用户认证:增加用户、删除用户、修改用户密码、读写权限、只读权限
- MongoDB增加用户认证:增加用户、删除用户、修改用户密码、读写权限、只读权限
- Mongodb用户和认证 权限总结