Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

updateUser

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 必需的访问权限
  • 例子
updateUser

更新运行该命令的数据库上的用户配置文件。对字段的更新将完全替换先前字段的值,包括对用户的 rolesauthenticationRestrictions 数组的更新。

提示

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

辅助方法对 mongosh 用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。

警告

roles 数组的更新会完全替换之前数组的值。要添加或删除角色而不替换用户的所有现有角色,请使用 grantRolesToUserrevokeRolesFromUser 命令。

若要更新用户,必须指定 updateUser 字段和除 writeConcern以外的至少一个其他字段。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

重要

M 0 、M 2 、M 5和 M 10 + 集群不支持此命令。 有关更多信息,请参阅不支持的命令。

该命令采用以下语法:

db.runCommand(
{
updateUser: "<username>",
pwd: passwordPrompt(), // Or "<cleartext password>"
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>", | "<CIDR range>", ...]
},
...
],
mechanisms: [ "<scram-mechanism>", ... ],
digestPassword: <boolean>,
writeConcern: { <write concern> },
comment: <any>
}
)

该命令接受以下字段:

字段
类型
说明
updateUser
字符串
要更新的用户的名称。
pwd
字符串

可选。用户的密码。该值可为:

  • 以明文字符串表示的用户密码,或

  • passwordPrompt() 提示输入用户密码。

    您可以将 passwordPrompt() 方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。不过,您仍然可以像使用早期版本的 mongo shell 一样直接指定密码。

customData
文档
可选。任意信息。
roles
阵列
可选。 授予用户的角色。 roles数组的更新会覆盖之前数组的值。
writeConcern
文档

可选。操作的写关注级别。请参阅写关注规范

authenticationRestrictions
阵列
可选。服务器对用户实施的身份验证限制。指定 IP 地址和 CIDR 范围列表,允许这些地址和范围的用户连接至服务器或者服务器接受这些用户。
mechanisms
阵列

可选。针对用户档案的特定 SCRAM 机制。如果指定了 authenticationMechanisms,则只能指定部分 authenticationMechanisms

如果在没有密码的情况下更新机制字段,则只能指定用户当前机制的子集,并且仅保留指定机制或机制的现有用户档案。

如果同时更新密码和机制,则会为用户存储一组新的档案。

有效值为:

  • "SCRAM-SHA-1"

    • 使用 SHA-1 哈希函数。

  • "SCRAM-SHA-256"

    • 使用 SHA-256 哈希函数。

    • 需将 featureCompatibilityVersion 设为 4.0

    • 要求 DigestPassword 设置为 true

digestPassword
布尔

可选。指示对密码进行摘要处理的是服务器还是客户端。

如果为 true(默认),服务器会从客户端接收未加密的密码,然后对此密码进行加密。

如果为 false,客户端将对密码进行摘要处理并将处理后的密码传递到服务器。与 SCRAM-SHA-256 不兼容

comment
any

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

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

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

要指定运行 updateUser 的同一数据库中存在的角色,可以使用角色名称指定角色:

"readWrite"

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

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

要指定存在于其他数据库中的角色,请使用文档指定该角色。

authenticationRestrictions 文档只能包含以下字段。如果 authenticationRestrictions 文档包含无法识别的字段,服务器会引发错误:

字段名称
说明
clientSource
IP 地址和/或 CIDR 范围的数组
如果存在,则在对用户进行身份验证时,服务器会验证客户端的 IP 地址是否在给定列表中或属于列表中的 CIDR 范围。如果客户端的 IP 地址不存在,服务器不会对用户进行身份验证。
serverAddress
IP 地址和/或 CIDR 范围的数组
客户端可以连接的 IP 地址或 CIDR 范围列表。如果存在,服务器将验证客户端的连接是否已通过给定列表中的 IP 地址接受。如果通过无法识别的 IP 地址接受连接,服务器不会对用户进行身份验证。

重要

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

例如,如果用户继承了一个角色(其中 clientSource 字段为 ["198.51.100.0"])和另一个角色(其中 clientSource 字段为 ["203.0.113.0"]),则服务器无法对该用户进行身份验证。

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

警告

默认情况下,updateUser 以明文形式将所有指定数据发送到 MongoDB 实例,即使使用 passwordPrompt() 也是如此。使用 TLS 传输加密来保护客户端和服务器之间的通信,包括 updateUser 发送的密码。有关启用 TLS 传输加密的操作说明,请参阅为 TLS/SSL 配置 mongodmongos

MongoDB 不以明文形式存储密码。仅当未启用 TLS 传输加密时,密码才会在客户端与服务器之间的传输过程中容易受到攻击。

要更新用户的 roles 数组,您必须具有包含所有数据库上的revokeRole动作的访问权限。

必须对某一角色的数据库执行 grantRole 操作才能向用户添加角色。

要更改其他用户的 pwdcustomData 字段,必须对该用户的数据库分别执行 changePasswordchangeCustomData 操作

要修改自己的密码和自定义数据,您必须具有分别授予在用户数据库上执行 changeOwnPasswordchangeOwnCustomData 动作的特权。

假定在 products 数据库中有用户 appClient01,其用户信息如下:

{
"_id" : "products.appClient01",
"userId" : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"),
"user" : "appClient01",
"db" : "products",
"customData" : { "empID" : "12345", "badge" : "9156" },
"roles" : [
{ "role" : "readWrite",
"db" : "products"
},
{ "role" : "read",
"db" : "inventory"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}

以下 updateUser 命令可以完全替换用户的 customDataroles 数据:

use products
db.runCommand( {
updateUser : "appClient01",
customData : { employeeId : "0x3039" },
roles : [ { role : "read", db : "assets" } ]
} )

products 数据库中的用户 appClient01 现在具有以下用户信息:

{
"_id" : "products.appClient01",
"userId" : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"),
"user" : "appClient01",
"db" : "products",
"customData" : { "employeeId" : "0x3039" },
"roles" : [
{ "role" : "read",
"db" : "assets"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}

后退

revokeRolesFromUser