mongodb 角色管理

  、创建自定义角色
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 或 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 >  } )
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 权限


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值