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

updateUser

本页内容

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

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

提示

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

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

警告

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

要更新用户,您必须指定 updateUser 字段以及至少一个其他字段,但不能是 writeConcern

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

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

重要

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

命令使用以下语法

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
string
要更新的用户名。
pwd
string

可选。用户的密码。值可以是

  • 明文字符串形式的用户密码,或

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

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

customData
document
可选。任何任意信息。
roles
数组
可选。授予用户的角色。对 roles 数组的更新将覆盖之前数组的值。
writeConcern
document

可选。操作中 写关注 的级别。见 写关注规范

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
任何

可选。用户提供的附加到此命令的注释。设置后,此注释将在以下位置显示此命令的记录

注释可以是任何有效的 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传输加密的说明,请参阅配置mongodmongos以TLS/SSL

MongoDB不会以明文形式存储密码。密码在客户端和服务器之间传输时才易受攻击,并且仅在未启用TLS传输加密的情况下。

您必须拥有包括所有数据库的revokeRole 操作的访问权限,才能更新用户的roles数组。

您必须拥有角色的数据库上的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