On this page
updateRole
在本页面
Definition
updateRole
- 更新user-defined role。 updateRole命令必须在角色的数据库上运行。
对字段的更新 完全替换 先前字段的值。要授予或删除角色或privileges而不替换所有值,请使用以下一个或多个命令:
Warning
privileges
或roles
数组的更新完全替换了先前数组的值。
updateRole命令使用以下语法。要更新角色,您必须提供privileges
数组和roles
数组,或同时提供两者:
{
updateRole: "<role>",
privileges:
[
{ resource: { <resource> }, actions: [ "<action>", ... ] },
...
],
roles:
[
{ role: "<role>", db: "<database>" } | "<role>",
...
],
authenticationRestrictions:
[
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>", ...]
},
...
]
writeConcern: <write concern document>
}
updateRole命令具有以下字段:
Field | Type | Description |
---|---|---|
updateRole |
string | 要更新的user-defined role角色的名称。 |
privileges |
array | 可选的。如果未指定roles数组,则为必需。授予角色的特权。 privileges 数组的更新将覆盖前一个数组的值。有关指定特权的语法,请参见privileges数组。 |
roles |
array | 可选的。如果未指定privileges数组,则为必需。该角色从中继承特权的角色。对roles 数组的更新将覆盖以前的数组的值。 |
authenticationRestrictions |
array | Optional. |
服务器对角色强制执行的身份验证限制。指定允许授予此角色的用户连接和/或可以从其连接的 IP 地址和 CIDR 范围的列表。
3.6 版中的新功能。
| writeConcern
|文档|可选。更新操作的write concern级别。 writeConcern
文档与getLastError命令具有相同的字段。
Roles
在roles
字段中,您可以同时指定built-in roles和user-defined roles。
要指定运行updateRole的同一数据库中存在的角色,可以使用该角色的名称指定该角色:
"readWrite"
或者,您可以通过文档指定角色,如:
{ role: "<role>", db: "<database>" }
要指定存在于其他数据库中的角色,请与文档一起指定该角色。
Authentication Restrictions
3.6 版的新功能。
authenticationRestrictions
文档可以仅包含以下字段。如果authenticationRestrictions
文档包含无法识别的字段,服务器将引发错误:
Field Name | Value | Description |
---|---|---|
clientSource |
IP 地址和/或 CIDR 范围的数组 | 如果存在,则在验证用户身份时,服务器将验证 Client 端的 IP 地址在给定列表中或属于列表中的 CIDR 范围。如果 Client 端的 IP 地址不存在,则服务器不会对用户进行身份验证。 |
serverAddress |
IP 地址和/或 CIDR 范围的数组 | Client 端可以连接的 IP 地址或 CIDR 范围的列表。如果存在,服务器将通过给定列表中的 IP 地址验证是否接受了 Client 端的连接。如果通过无法识别的 IP 地址接受了连接,则服务器不会对用户进行身份验证。 |
Important
如果用户继承具有不兼容身份验证限制的多个角色,则该用户将变得无法使用。
例如,如果用户继承一个角色,其中clientSource
字段是["198.51.100.0"]
,而另一个角色则继承clientSource
字段是["203.0.113.0"]
,则服务器将无法对该用户进行身份验证。
有关 MongoDB 中身份验证的更多信息,请参阅Authentication。
Behavior
角色的特权适用于创建角色的数据库。该角色可以从其数据库中的其他角色继承特权。在admin
数据库上创建的角色可以包括适用于所有数据库或cluster的特权,并且可以从其他数据库中的角色继承特权。
Required Access
您必须在所有数据库上都拥有revokeRole action才能更新角色。
您必须在roles
数组中每个角色的数据库上拥有grantRole action才能更新该数组。
您必须在privileges
数组中每个特权的数据库上拥有grantRole action才能更新该数组。如果特权的资源跨越数据库,则admin
数据库上必须具有grantRole。如果特权是以下任意一项,则特权跨越数据库:
所有数据库中的一个集合
所有集合和所有数据库
cluster
资源
您必须在目标角色的数据库上拥有setAuthenticationRestriction action才能更新角色的authenticationRestrictions
文档。
Example
以下是更新admin
数据库上myClusterwideAdmin
角色的updateRole命令的示例。虽然privileges和roles数组都是可选的,但至少需要两者之一:
db.adminCommand(
{
updateRole: "myClusterwideAdmin",
privileges:
[
{
resource: { db: "", collection: "" },
actions: [ "find" , "update", "insert", "remove" ]
}
],
roles:
[
{ role: "dbAdminAnyDatabase", db: "admin" }
],
writeConcern: { w: "majority" }
}
)
要查看角色的特权,请使用rolesInfo命令。