一
、创建自定义角色
db.createRole(role, writeConcern)
writeConcern 为可选项
须具有:createRole 、grantRole action 权限
{
role : "<name>" ,
privileges : [
{ resource : { < resource > }, actions : [ "<action>" , ... ] },
...
],
roles : [
{ role : "<role>" , db : "<database>" } | "<role>" ,
...
] }
role : "<name>" ,
privileges : [
{ resource : { < resource > }, actions : [ "<action>" , ... ] },
...
],
roles : [
{ role : "<role>" , db : "<database>" } | "<role>" ,
...
] }
db.createRole({role:"manageCurrentOpRole",
privileges:[
{resource:{cluster:true},actions:["killop","inprog"]},
{resource:{db:"",collection:""},actions:["killCurrsors"]}
],roles:[]
})
db.createRole({role:"manageLogRotateRole",privileges:[{resource:{cluster:true},actions:["logRotate"]}],roles:[]});
db.createRole({role:"SupervisorRole",privileges:[{resource:{cluster:true},actions:["shutdown","replSetStateChange"]}],roles:[]});
注:必须加 roles 项,roles:[] 的[] 代表没有任何角色。
Resource具有 database 或collection 或 cluster 或 anyResource
4种类型:
1.1
如果 是 db:""类型(值为空)并且 collection:collectionName(值不为空),则表示拥有 所有数据库上 集合名为collectionName 上的权限
Example:
{db:"",collection:"collectionName"}
1.2
如果 是 collection:""类型(值为空),但db:dbname(值不为空),则表示拥有 在指定数据库上但 不包括系统表collection 上的 权限
Example:
{db:"dbname",collection:""}
如果要指定系统表 则 需要指定具体的系统表 。例如 collection:"system.profile"
1.3
指定在所有数据库上的非系统集合表上拥有权限
Example:
{db:"",collection:""}
3、
Resource是 cluster类型的有:
{cluster:true}
即如果要创建 复制集或分片上的角色权限时要指定 {cluter:true}
3.1、创建一个可以 管理 mongostat的角色
use admin
db.createRole({role:"mongostatMangeRole",
privileges:[{resource:{cluster:true},actions:["serverStatus"]}]
})
4、
anyResource 类型是mongodb的内部使用类型。慎用(超级权限)
db.createRole({role:"bigRole",privileges:[{resource:{anyResource:true},actions:["anyAction"]}],roles:[]})
二
、更新角色
db.updateRole(rolename, update, writeConcern)
writeConcern 为可选项
须具有:revokeRole 、grantRole action 权限
db
.
updateRole
(
"<rolename>" ,
{
privileges :
[
{ resource : { < resource > }, actions : [ "<action>" , ... ] },
...
],
roles :
[
{ role : "<role>" , db : "<database>" } | "<role>" ,
...
]
},
{ < writeConcern > } )
"<rolename>" ,
{
privileges :
[
{ resource : { < resource > }, actions : [ "<action>" , ... ] },
...
],
roles :
[
{ role : "<role>" , db : "<database>" } | "<role>" ,
...
]
},
{ < writeConcern > } )
Example:
use dbname
db.updateRole(
"myroleName",
{
privileges:[{resource:{db:"dbname",collection:"collectionName"},actions:["find","update","createIndex"]}],
roles:[{role:"readWrite",db:"dbname"}]
},
{w:2})
三、删除角色(删除所有角色)
db.dropRole(rolename, writeConcern)----在指定的数据库上 删除指定的单个用户自定义角色
writeConcern 为可选项
须具有:dropRole action 权限
Example:
use dbname
db.dropRole("myroleName")
或
db.dropRole("myroleName",{w:"majority"})
b.dropAllRoles(writeConcern)---在指定的数据库上 删除所有用户自定义角色
use dbname
db.dropAllRoles()
或
db.dropAllRoles({w:"majority"})
四、将权限加入到指定角色中
db.grantPrivilegesToRole(rolename, privileges, writeConcern)
writeConcern 为可选项
须具有:grantRole action 权限
db
.
grantPrivilegesToRole
(
"< rolename >" ,
[
{ resource : { < resource > }, actions : [ "<action>" , ... ] },
...
],
"< rolename >" ,
[
{ resource : { < resource > }, actions : [ "<action>" , ... ] },
...
],
{
<
writeConcern
>
}
)
Example:
use products
db.grantPrivilegesToRole(
"inventoryCntrl01",
[
{
resource: { db: "products", collection: "" },
actions: [ "insert" ]
},
{
resource: { db: "products", collection: "system.js" },
actions: [ "find" ]
}
],
{ w: "majority" }
)
五、将权限从指定角色中移除
db.revokePrivilegesFromRole(rolename, privileges, writeConcern)
writeConcern 为可选项
须具有:revokeRole action 权限
Example:
db.revokePrivilegesFromRole(
"associate",
[
{
resource: { db: "products", collection: "" },
actions: [ "createCollection", "createIndex", "find" ]
},
{
resource: { db: "products", collection: "orders" },
actions: [ "insert" ]
}
],
{ w: "majority" }
)
注:移除权限从指定角色中,要求 resource的域范围一致。比如 如果 {db:"dbaname",collection:""}时,在移除操作时 不能在collection 范围中指定具体的 collectionName值,否则不会有任何变化。
比如 products库上有 accountRole角色并具有如下权限
{
"resource" : {
"db" : "products" ,
"collection" : ""
},
"actions" : [
"find" ,
"update"
] }
"resource" : {
"db" : "products" ,
"collection" : ""
},
"actions" : [
"find" ,
"update"
] }
以下移除权限是错误的,结果不会有任何变化
use products
db.revokePrivilegesFromRole(
"accountRole",
[
{
resource : {
db : "products",
collection : "gadgets"
},
actions : [
"find",
"update"
]
}
]
)
db.revokePrivilegesFromRole(
"accountRole",
[
{
resource : {
db : "products",
collection : "gadgets"
},
actions : [
"find"
]
}
]
)
用下列方法移除则 正确:
use products
db.revokePrivilegesFromRole(
"accountRole",
[
{
resource : {
db : "products",
collection : ""
},
actions : [
"find"
]
}
]
)
六、将多个角色加入指定用户自定义角色中
db.grantRolesToRole(rolename, roles, writeConcern)
db.grantRolesToRole( "<rolename>", [ <roles> ], { <writeConcern> } )
writeConcern 为可选项
须具有:grantRole action 权限
use dbname
db.grantRolesToRole("myRolesName",["myRoleReader","myRoleWrite"],{w:"majority",wtimeout:10000})
或
db.grantRolesToRole("myRolesName",["myRoleReader",{role:"roleName"db:"FromDB"}],{w:"majority",wtimeout:10000})
即:可以直接写角色名也可以显示指定角色名及角色所属数据库
注:在Admin数据库长创建的角色可以继承来自任何数据库上的角色
七、将角色从指定的角色中移除
db.revokeRolesFromRole(rolename, roles, writeConcern)
db.revokeRolesFromRole( "<rolename>", [ <roles> ], { <writeConcern> } )
writeConcern 为可选项
须具有:revokeRole action 权限
use emea
db.revokeRolesFromRole( "purchaseAgents",
[
"writeOrdersCollection",
"readOrdersCollection"
],
{ w: "majority" , wtimeout: 5000 }
)
或
use emea
db.revokeRolesFromRole( "purchaseAgents",
[
{role:"writeOrdersCollection",db:"emea"},
{role:"readOrdersCollection",db:"emea"}
],
{ w: "majority" , wtimeout: 5000 }
)
即:可以直接写角色名也可以显示指定角色名及角色所属数据库
八、获取角色继承的权限及权限
db.getRole(rolename, showPrivileges)
showPrivileges 为可选项
use dbname
db.getRole("myroleName")
或者
db.getRole("myroleName",{showPrivileges:true})
须具有:viewRole action 权限
九、获取指定数据库上的所有角色
db.getRoles()
参数有:
rolesInfo :1 显示所有用户定义角色
showPrivileges: true 则显示权限,false则不显示。可选项
showBuiltinRoles:true 则显示内置的角色及用用户定义的角色
如果不传入 任何参数则 显示所有用户自定义角色
须具有:viewRole action 权限