写在前面的话
- 本篇博客主要介绍Mongobd的用户管理
- 本篇博客以参考官方文档为主
- 本篇涉及到官方文档的部分是:[ http://docs.mongodb.org/manual/core/access-control/ ]
- 如果可能,请尽量阅读官方文档,而不是看我的这篇博客。个人强烈推荐直接阅读官方文档。
- 本人英语水平不好,肯定会遇到错误或疏忽之处,请指出。(这也是推荐直接官方Docs的原因之一)
- 转载请注明出处,
开始
先看下官方文档的简单介绍
MongoDB provides support for authentication and authorization on a per-database level. Users exist in the context of a single logical database.
MongoDb提供的基于数据库级别的权限控制,每个数据库都有属于自己的管理者帐号。这一点不同与Mysql之类的数据库,Mysql中的用户是对创建的connection里面的每个数据库都具有操作权限。而Mongodb是每个数据库都拥有一个套属于自己的用户表。例如,有两个db A和B,在A中的用户UserA,在B中是不存在的,更不用说操作权限了。
在用户安装完monogdb后 默认是没有开启权限验证 。如果希望开启,则需要自己配置。当然,这也是属于本篇博客的主要内容了。
在敲代码之前先讲官方文档提到的东西。
- 每个db中有存在一个叫system.users(如果没管理者信息,则不存在)的Collection,这个Collection中就保存着当前这个db的管理用户帐号信息。描述原文如下:
For basic authentication, MongoDB stores the user credentials in a database’s system.users collection.
在Mongodb中有个叫admin的数据库。这个admin数据库提供一个在其他数据库中不可使用的角色。这个角色可以在其他数据库中创建超级管理员。
简单来说就是 有个叫admin的数据库,这里面保存着一种角色,这个角色无法直接操作其他的数据。但是,这个角色可以为其他数据库来添加一个超级管理员。 换句话说,除admin之外的其他db(假设为D),需要admin数据库里面的角色(假设为A)权限来创建一个属于自己的管理员(假设为B),这个管理员B才具有对D具有增删改(当然增删改的权限可以分别对B进行现在,在A创建B时)的权限,A 确实没有这个权限的。
这个大概就是mongodb的用户管理的一个大致分析。
下面我们根据实际操作来看看 用户增加使用。
添加超级管理员
第一步 ,先得安装好mongodb和设置好它。具体可以见我的另外一篇博客。
启动mongod
运行以下命令:(#号后面为注释)
use admin #切换到admin db
db.addUser( {
user: "admin", #替换成自己的用户名
pwd: "password", #替换成自己的密码
roles: [ "userAdminAnyDatabase" ] } )
运行完上面的命令后,大概会出来这个东西
{
"user" : "admin",
"pwd" : "90f500568434c37b61c8c1ce05fdf3ae",
"roles" : [
"userAdminAnyDatabase"
],
"_id" : ObjectId("52d400465feca82c4fdb1a48")
}
现在超级数据库管理员 [注:这里包括下文 把admin数据库中创建的用户,叫做超级管理员] 已经完成创建了。
现在验证一下
db.auth("admin","password");#实际上这个相当于一个登录操作。
这是如果帐号密码输入正确的话,应该返回一个 1.否则返回 0。
这时你可以执行: