mongodb 角色管理

来源:互联网 发布:怎么设置软件锁 编辑:程序博客网 时间:2024/06/08 13:47
 、创建自定义角色
db.createRole(role, writeConcern)
writeConcern 为可选项
须具有:createRole 、grantRole action 权限
{
  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 或 anyResource4种类型:
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> })
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>", ... ] },
        ...
    ],
    { < 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"
  ]}
以下移除权限是错误的,结果不会有任何变化
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 权限


0 0