On this page
updateUser
在本页面
Definition
updateUser
- 在运行命令的数据库上更新用户的配置文件。对字段的更新“完全替换”了先前字段的值,包括对用户的
roles
和authenticationRestrictions
数组的更新。
- 在运行命令的数据库上更新用户的配置文件。对字段的更新“完全替换”了先前字段的值,包括对用户的
Warning
更新roles
数组时,将完全替换先前数组的值。要添加或删除角色而不替换所有用户现有角色,请使用grantRolesToUser或revokeRolesFromUser命令。
updateUser命令使用以下语法。要更新用户,您必须指定updateUser
字段和至少一个其他字段(writeConcern
除外):
{
updateUser: "<username>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
writeConcern: { <write concern> }
}
该命令具有以下字段:
Field | Type | Description |
---|---|---|
updateUser |
string | 要更新的用户名。 |
pwd |
string | 可选的。用户密码。 |
customData |
document | 可选的。任何任意信息。 |
roles |
array | 可选的。授予用户的角色。 roles 数组的更新将覆盖以前的数组的值。 |
digestPassword |
boolean | 可选的。当true 时,mongod实例将创建用户密码的哈希值;否则,Client 端负责创建密码的哈希。默认为true 。 |
writeConcern |
document | 可选的。更新操作的write concern级别。 writeConcern 文档具有与getLastError命令相同的字段。 |
authenticationRestrictions |
array | 可选的。服务器对用户实施的身份验证限制。指定允许用户连接到服务器或服务器可以接受用户的 IP 地址和 CIDR 范围的列表。 |
3.6 版中的新功能。
Roles
在roles
字段中,您可以同时指定built-in roles和user-defined roles。
要指定运行updateUser的同一数据库中存在的角色,可以使用该角色的名称指定该角色:
"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
Warning
默认情况下,updateUser以明文形式将所有指定的数据发送到 MongoDB 实例。使用 TLS 传输加密来保护 Client 端和服务器之间的通信,包括updateUser发送的密码。有关启用 TLS 传输加密的说明,请参见为 TLS/SSL 配置 mongod 和 mongos。
MongoDB 不会以明文形式存储密码。仅在未启用 TLS 传输加密的情况下,该密码仅在 Client 端和服务器之间的传输中容易受到攻击。
Required Access
您必须具有在所有数据库上包括revokeRole action的访问权限,才能更新用户的roles数组。
您必须在角色的数据库上拥有grantRole action才能向用户添加角色。
要更改另一个用户的pwd
或customData
字段,您必须在该用户的数据库上分别拥有changeAnyPassword
和changeAnyCustomData
actions。
要修改您自己的密码和自定义数据,您必须具有分别在用户数据库上授予changeOwnPassword和changeOwnCustomData actions的特权。
Example
为products
数据库中的用户appClient01
提供以下用户信息:
{
"_id" : "products.appClient01",
"userId" : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"), // Starting in MongoDB 3.6.13
"user" : "appClient01",
"db" : "products",
"credentials" : {
"SCRAM-SHA-1" : {
"iterationCount" : 10000,
"salt" : "vXYL9Q3NnfZjLHCOej0NLQ==",
"storedKey" : "Bw0MXnC1hEBbM3lDebatMRZSokQ=",
"serverKey" : "tzvPqiB7ynqji5kmrCiAkUrke+Q="
}
},
"customData" : { "empID" : "12345", "badge" : "9156" },
"roles" : [
{ "role" : "readWrite",
"db" : "products"
},
{ "role" : "read",
"db" : "inventory"
}
]
}
以下updateUser命令“完全” **替换了用户的customData
和roles
数据:
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"), // Starting in MongoDB 3.6.13
"user" : "appClient01",
"db" : "products",
"credentials" : {
"SCRAM-SHA-1" : {
"iterationCount" : 10000,
"salt" : "vXYL9Q3NnfZjLHCOej0NLQ==",
"storedKey" : "Bw0MXnC1hEBbM3lDebatMRZSokQ=",
"serverKey" : "tzvPqiB7ynqji5kmrCiAkUrke+Q="
}
},
"roles" : [
{ "role" : "read",
"db" : "assets"
}
],
"customData" : { "employeeId" : "0x3039" }
}