Mongdb安全和认证:
每个MongoDB实例中的数据库都可以有许多用户,如果开启了安全性检查,则只有数据库认证用户才能执行读或者写操作。在认证的上下文中,MongoDB会将普通的数据作为admin数据库处理。admin数据库中的用户被视为超级用户(即管理员)。在认证之后,管理员可以读写所有的数据库,执行特点的管理命令。、
userDocument字段介绍:
user字段:新用户的名字
pwd字段:新用户的密码
customData:为任意内容
roles:指定用户的角色,可以用一个数组给新用户设定角色,角色用户可以指定内置觉得和用户自定义的角色
内置角色的内容:
查看内置角色的详情:http://docs.mongodb.org/manual/reference/built-in-roles/#built-in-roles
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
// 关于每个角色所拥有的操作权限可以点击上面的内置角色链接查看详情。
db指的是对应的库
每个MongoDB实例中的数据库都可以有许多用户,如果开启了安全性检查,则只有数据库认证用户才能执行读或者写操作。在认证的上下文中,MongoDB会将普通的数据作为admin数据库处理。admin数据库中的用户被视为超级用户(即管理员)。在认证之后,管理员可以读写所有的数据库,执行特点的管理命令。、
在开启安全检查之前,一定要至少有一个管理员账户。
开启服务器,并且开启安全认证:
mongod --dbpath=F:\Users\mongdb --auth
若没有通过: db.auth(username, password)
认证通过,则很多操作都操作不了,例如:查看集合db.getCollectionNames()
那么如何创建用户了,笔者在网上发现很多写法是db.createUser(),但是在笔者最新的版本中:
> db.version()
3.0.5
> db.help()
DB methods:
db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs comma
nd [ just calls db.runCommand(...) ]
db.auth(username, password)
db.cloneDatabase(fromhost)
db.commandHelp(name) returns the help for the command
db.copyDatabase(fromdb, todb, fromhost)
db.createCollection(name, { size : ..., capped : ..., max : ... } )
db.createUser(userDocument)
......
发现只有db.createUser(userDocument)这个方法,可能在新的版本中略有不同,既然新版本是这样,人也是往前走的,所以就研究createUser()这个方法是如何创建用户权限的的吧,首先搞明白:createUser(userDocument)
这个方法的API是什么:
{
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}
userDocument字段介绍:
user字段:新用户的名字
pwd字段:新用户的密码
customData:为任意内容
roles:指定用户的角色,可以用一个数组给新用户设定角色,角色用户可以指定内置觉得和用户自定义的角色
内置角色的内容:
查看内置角色的详情:http://docs.mongodb.org/manual/reference/built-in-roles/#built-in-roles
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
// 关于每个角色所拥有的操作权限可以点击上面的内置角色链接查看详情。
OK,实操部分:
我们创建用户全部都在admin库里面创建:
1.创建admin库
>use admin
db.createUser(
{
user: "root",
pwd: "123456",
roles:
[
{role:"userAdminAnyDatabase",db:"admin"},
"readWrite"
]
}
)
*说明:userAdminAnyDatabase是上面内置角色,具体这个角色的权限有哪些可以去官网看看
db指的是对应的库
3.为相应的库创建只读用户
db.createUser(
{
user: "feng",
pwd: "123456",
roles:
[
{role:"read",db:"mydb"},
]
}
)
*创建好了后,在mydb库中只能查看集合的信息,不能进行相应的插入数据
4.为相应的库创建既能读,又能写的用户
db.createUser(
{
user: "wang",
pwd: "123456",
roles:
[
{role:"readWrite",db:"mydb"},
]
}
)
*创建好了后,在mydb库中能查看集合的信息,也能进行相应的插入数据