📜  MongoDB角色管理方法

📅  最后修改于: 2020-11-23 01:27:44             🧑  作者: Mango

角色管理方法

角色管理命令用于管理用户的角色。以下是用于不同目的的方法。

#1 db.createRole(角色,writeConcern)

createRole方法用于在数据库下分配角色。使用此方法,我们可以通过显式列出特权来为角色指定特权。您也可以通过使角色继承某些不同角色或两者的特权来执行此操作。该角色始终适用于我们在其上运行方法的数据库。

句法:

{
  role: "",
  privileges: [
     { resource: {  }, actions: [ "", ... ] },
     ...
  ],
  roles: [
     { role: "", db: "" } | "",
  ],
  authenticationRestrictions: [
    {
      clientSource: ["" | "", ...],
      serverAddress: ["" | "", ...]
    }, ]}

例:

admin数据库上的JTPAdmin角色将使用cerate角色方法创建:

use admin
db.createRole(
   {
     role: "JTPAdmin",
     privileges: [
       { resource: { cluster: true }, actions: [ "addShard" ] },
       { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] },
       { resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] },
       { resource: { db: "", collection: "" }, actions: [ "find" ] }
     ],
     roles: [
       { role: "read", db: "admin" }
     ]
   },
   { w: "majority" , wtimeout: 5000 }
)

输出:

#2。 db.dropRole(角色名称,writeConcern)

drop role方法用于从运行该方法的数据库中删除指定的用户定义角色。

以下示例从教程数据库中删除readsubject角色:

use test
db.dropRole( "testrole", { w: "majority" } )

输出:

#3。 db.dropAllRoles(writeConcern)

drop all role方法用于从运行该方法的数据库中删除所有指定的用户定义角色。

下面的示例使用多数写问题,并从教程数据库中删除所有用户定义的角色。

use tutorials
db.dropAllRoles( { w: "majority" } )

输出:

#4。 db.getRole(角色名称,args)

在MongoDB中,角色继承其他角色的实例。此方法用于获取该角色从其继承特权的父角色。同样,可以使用此方法返回所有角色的特权。

当我们从包含用户定义角色和内置角色的数据库中运行db.getRole()方法时,指定的命令可以检索信息。

例子:

use tutorials
db.getRole( "Admin" )

对于角色,教程数据库上定义的Admin返回角色继承信息和特权。

use tutorials
db.getRole( "Admin", { showPrivileges: true } )

#5。 db.getRoles()

返回运行命令的数据库中所有角色的信息。我们可以使用带有或不带有参数的此方法。如果我们在不带参数的情况下运行此方法,则该方法将返回数据库的用户定义角色的继承信息。

以下查询将返回教程数据库中所有现有角色的文档,还包括角色特权和内置角色:

db.getRoles(
    {
      rolesInfo: 1,
      showPrivileges:true,
      showBuiltinRoles: true
    }
)

输出:

#6。 db.updateRole( )

更新角色方法用于更新用户定义的角色。要更新用户定义的角色,它必须在指定角色的数据库上运行。当我们更新字段时,它将完全替换旧字段的值。

在这种情况下,我们需要添加或删除角色/特权而不替换每个值,我们必须使用一种或多种列出的方法:

  • grantRolesToRole()
  • grantPrivilegesToRole()
  • revokeRolesFromRole()
  • revokePrivilegesFromRole()

下面的示例将替换教程数据库中存在的图书管理员角色的特权和角色。该方法在包含图书管理员的数据库上运行:

use tutorial
db.updateRole(
    "librarian",
    {
      privileges:
          [
            {
              resource: { db:"tutorials", collection:"books" },
              actions: [ "update", "createCollection", "createIndex"]
            }
          ],
      roles:
          [
            {
              role: "read",
              db: "products"
            }
          ]
    },
    { w:"majority" }
)

Shell输出和示例: