MongoDB 角色管理方法
角色管理命令用于管理用户的角色。以下是用于不同目的的方法。
db.createRole(role, writeConcern)
createRole方法用于在数据库下分配角色。使用此方法,我们可以通过显式列出权限来指定角色的权限。您还可以通过让角色从其他角色继承权限或两者都继承来执行此操作。该角色始终应用于运行该方法的数据库。
语法:
{
role: "<role_name>",
privileges: [
{ resource: { <resource> }, actions: [ "<action>", ... ] },
...
],
roles: [
{ role: "<role_name>", db: "<database_name>" } | "<role>",
],
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>" | "<CIDR range>", ...]
}, ]}
示例:
在管理数据库上将创建JTPAdmin角色,使用create role方法:
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 }
)
输出:
db.dropRole(rolename, writeConcern)
删除角色方法用于从正在运行该方法的数据库中删除指定的用户定义角色。
示例
以下示例将从教程数据库中删除readsubject角色:
use test
db.dropRole( "testrole", { w: "majority" } )
输出:
db.dropAllRoles(writeConcern)
删除所有角色的方法被用来从运行该方法的数据库中移除所有指定的用户定义角色。
示例
以下示例使用了一个多数提交的写关注,并从tutorials数据库中删除了所有用户定义的角色。
use tutorials
db.dropAllRoles( { w: "majority" } )
输出:
db.getRole(rolename, args)
在MongoDB中,角色继承其他角色的实例。此方法用于获取该角色继承特权的父角色。此外,可以使用此方法返回所有角色的特权。
当我们从包含用户定义角色和内置角色的数据库中运行db.getRole()方法时,指定的命令可以检索信息。
示例:
use tutorials
db.getRole( "Admin" )
对于这个角色,管理员在教程数据库中定义了角色继承信息和权限。
use tutorials
db.getRole( "Admin", { showPrivileges: true } )
db.getRoles()
返回运行该命令的数据库中所有角色的信息。我们可以使用该方法带或不带 参数。如果我们不带参数运行此方法,该方法将返回数据库用户定义角色的继承信息。
示例
以下查询将返回教程数据库上所有现有角色的文档,同时包括角色权限和内置角色:
db.getRoles(
{
rolesInfo: 1,
showPrivileges:true,
showBuiltinRoles: true
}
)
输出:
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输出和示例: