文档菜单
文档首页
/
MongoDB 手册
/ / /

更新角色

本页

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 所需访问权限
  • 示例
updateRole

更新用户定义的角色。必须在该角色的数据库上运行updateRole 命令。

提示

mongosh 中,此命令还可以通过 db.updateRole() 辅助方法运行.

辅助方法对于 mongosh 用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要便利性或需要额外返回字段的情况下,请使用数据库命令。

字段更新会完全替换先前字段的值。要授予或移除角色或 权限 而不替换所有值,请使用以下一个或多个命令

注意

更新 privilegesroles 数组会完全替换先前数组的值。

此命令可在以下环境中托管的部署中使用

重要

此命令不支持M0、M2、M5和M10+集群。更多信息,请参阅不支持命令。

要更新角色,您必须提供privileges数组、roles数组或两者。

该命令使用以下语法

db.runCommand(
{
updateRole: "<role>",
privileges:
[
{ resource: { <resource> }, actions: [ "<action>", ... ] },
...
],
roles:
[
{ role: "<role>", db: "<database>" } | "<role>",
...
],
authenticationRestrictions:
[
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>", ...]
},
...
]
writeConcern: <write concern document>,
comment: <any>
}
)

该命令采用以下字段

字段
类型
描述
更新角色
string
要更新的用户定义角色角色的名称。
privileges
array
可选。如果不指定 roles 数组,则为必需。授予角色的权限。对 privileges 数组的更新会覆盖先前数组的值。有关指定权限的语法,请参阅 privileges 数组。
roles
array
可选。如果不指定 privileges 数组,则为必需。此角色从中继承权限的角色。对 roles 数组的更新会覆盖先前数组的值。
authenticationRestrictions
array

可选。

服务器对角色强制执行的认证限制。指定允许用户连接到的 IP 地址列表和CIDR 范围,以及他们可以从哪里连接。

writeConcern
document

可选。操作的写入关注级别。请参阅 写入关注说明。

comment
any

可选。用户为此命令提供的注释。一旦设置,此注释将出现在以下位置的相关记录旁边

注释可以是任何有效的 BSON 类型(字符串、整数、对象、数组等)。

roles 字段中,您可以指定内置角色和 用户定义的角色

要指定与 updateRole 运行的数据库相同的数据库中存在的角色,您可以使用角色的名称指定该角色

"readWrite"

或者您可以使用文档指定该角色,如下所示

{ role: "<role>", db: "<database>" }

要指定在另一个数据库中存在的角色,请使用文档指定该角色。

身份验证限制文档只能包含以下字段。如果身份验证限制文档包含服务器无法识别的字段,则服务器会抛出错误。

字段名称
描述
clientSource
IP地址和/或CIDR范围的数组
如果存在,当验证用户身份时,服务器会检查客户端的IP地址是否在给定的列表中,或者是否属于列表中的CIDR范围。如果客户端的IP地址不在列表中,服务器将不会验证用户身份。
serverAddress
IP地址和/或CIDR范围的数组
客户端可以连接的IP地址或CIDR范围的列表。如果存在,服务器将验证客户端的连接是否是通过给定的列表中的IP地址接受的。如果通过未识别的IP地址接受连接,则服务器不会验证用户身份。

重要

如果一个用户继承多个具有不兼容身份验证限制的角色,则该用户将不可用。

例如,如果一个用户继承了一个角色,其中clientSource字段为["198.51.100.0"],另一个角色的clientSource字段为["203.0.113.0"],则服务器无法验证该用户。

有关MongoDB中身份验证的更多信息,请参阅自管理部署的身份验证。

角色的权限适用于创建角色的数据库。该角色可以从其数据库中的其他角色继承权限。在admin数据库上创建的角色可以包含适用于所有数据库或集群的权限,并可以继承来自其他数据库的角色的权限。

您必须拥有所有数据库上的 revokeRole 操作 才能更新角色。

您必须拥有 roles 数组中每个角色的数据库上的 grantRole 操作 才能更新数组。

您必须拥有 privileges 数组中每个权限的数据库上的 grantRole 操作 才能更新数组。如果权限的资源跨越数据库,您必须在 admin 数据库上拥有 grantRole。以下权限跨越数据库:

  • 所有数据库中的集合

  • 所有集合和所有数据库

  • 集群资源

您必须在目标角色的数据库上拥有 setAuthenticationRestriction 操作 才能更新角色的 authenticationRestrictions 文档。

以下是一个更新 admin 数据库上的 myClusterwideAdmin 角色的 updateRole 命令的示例。虽然 privilegesroles 数组都是可选的,但至少需要两个中的一个。

db.adminCommand(
{
updateRole: "myClusterwideAdmin",
privileges:
[
{
resource: { db: "", collection: "" },
actions: [ "find" , "update", "insert", "remove" ]
}
],
roles:
[
{ role: "dbAdminAnyDatabase", db: "admin" }
],
writeConcern: { w: "majority" }
}
)

要查看角色的权限,请使用 rolesInfo 命令。

返回

角色信息