Mongodb中的角色介绍
Mongo
默认没有访问控制,用户需要通过--auth或者security.authorization
来使得访问控制可用,启用了内部的身份验证就可以通过客户端来连接数据库
角色具有特定的权限,可以授权给用户,用户拥有角色后就可以对指定的资源执行指定的操作;
角色的权限可以显示指定,也可以从其它角色继承
权限包括指定的资源和对该资源允许的操作组成
资源
可以是数据库、集合等
可以在用户的创建过程中为用户分配角色,也可以更新现有用户的角色
#新建用户user1,并为其分配对于数据库db1的readWrite权限
db.createUser(
... {
... user:"user1",
... pwd:"*******",
... roles:[{role:"readWrite",db:"db1"}]
... })
#对现有用户user1进行角色更新,使其对数据库db1具有dbAdmin角色权限,会覆盖其之前所有的角色权限
db.updateUser(
... "user1",
... {
... roles:[{role:"dbAdmin",db:"db1"}]
... })
#updateUser()会覆盖其之前所有的角色权限
>db.getUser("user1")
{
"_id" : "db1.user1",
"user" : "user1",
"db" : "db1",
"roles" : [
{
"role" : "readWrite",
"db" : "db1"
}
]
}
#对现有用户user1新增角色权限,不会覆盖之前的角色
db.grantRolesToUser(
... "user1",
... [{role:"readWrite",db:"db1"}]
... )
#同样还可以通过revokeRolesFromUser()为用户移除角色
db.revokeRolesFromUser(
... "user1",
... [{role:"readWrite",db:"db1"}]
... )
更多内容见Mongodb官网
允许读取当前数据库的非系统类集合以及system.js
(包含特殊的 JavaScript 代码,用于服务器端 JavaScript)合,可执行的操作如下表:
changeStream |
collStats |
dbHash |
---|---|---|
dbStats |
find |
killCursors |
listIndexes |
listCollections |
允许读写当前数据库的非系统类集合以及system.js
,可执行的操作如下表:
collStats |
convertToCapped |
createCollection |
dbHash |
---|---|---|---|
dbStats |
dropCollection |
createIndex |
dropIndex |
find |
insert |
killCursors |
listIndexes |
listCollections |
remove |
renameCollectionSameDB |
update |
允许对当前数据库进行管理任务(如数据库架构相关任务、索引和收集统计信息等),但不能对数据库的用户和角色进行管理
,可执行的操作如下表:
changeStream |
dropCollection |
collStats |
find |
---|---|---|---|
convertToCapped |
killCursors |
createCollection |
listCollections |
dbHash |
listIndexes |
dbStats |
planCacheRead |
允许对当前数据库的用户和角色进行管理,因此如果是admin数据库中的userAdmin,则相当于间接拥有了超级用户的权限,可允许的操作如下表:
changeCustomData |
changePassword |
createRole |
createUser |
---|---|---|---|
dropRole |
dropUser |
grantRole |
revokeRole |
setAuthenticationRestriction |
viewRole |
viewUser |
数据库所有者,dbOwner=readWrite+dbAdmin+userAdmin
上面介绍的数据库用户角色
和数据库管理角色
只限于对当前数据库的操作,Cluster Administration Roles可以允许对整个数据库系统中的数据库进行操作,具体角色包括:
clusterAdmin | clusterManager |
---|---|
clusterMonitor | hostManager |
顾名思义,就是数据库中用于备份和还原数据的角色,该角色专属于admin数据库
在任何资源
上,可进行的备份相关操作如下:
listDatabases |
listCollections |
listIndexes |
---|---|---|
可进行的多数据库操作如下:
appendOplogNote |
getParameter |
listDatabases |
serverStatus |
---|---|---|---|
基于备份数据操作的角色,详见mongodb官网
提供对所有数据的操作权限,具体角色包括:
readAnyDatabase | readWriteAnyDatabase |
---|---|
userAdminAnyDatabase | dbAdminAnyDatabase |
前面提到的几个角色用间接或直接的拥有了超级用户的权限
- dbOwner和userAdmin当其作用的数据库为admin时
- userAdminAnyDatabase在任何情况下
通过集成多个角色实现对所有数据库的所有操作:
root=readWriteAnyDatabase+dbAdminAnyDatabase+userAdminAnyDatabase
+clusterAdmin+restore+backup
授权其所有者对数据库中的任何对象执行任何操作
用户还可以自己定义角色,详见mongodb官网createRole