createUser
定义
createUser
在运行命令的数据库上创建新用户。 如果用户存在,
createUser
命令将返回重复用户错误。提示
在
mongosh
中,该命令也运行通过db.createUser()
辅助方法运行。辅助方法对
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
M 0 、M 2 、M 5和 M 10 + 集群不支持此命令。 有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
提示
您可以将 passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。不过,您仍然可以像使用早期版本的 mongo
shell 一样直接指定密码。
db.runCommand( { createUser: "<name>", pwd: passwordPrompt(), // Or "<cleartext password>" customData: { <any information> }, roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], writeConcern: { <write concern> }, authenticationRestrictions: [ { clientSource: [ "<IP|CIDR range>", ... ], serverAddress: [ "<IP|CIDR range>", ... ] }, ... ], mechanisms: [ "<scram-mechanism>", ... ], digestPassword: <boolean>, comment: <any> } )
命令字段
createUser
有以下字段:
字段 | 类型 | 说明 |
---|---|---|
| 字符串 | 新用户的名称。 |
| 字符串 | 用户的密码。如果您对 该值可为以下任一项:
您可以将 |
| 文档 | 可选。任意信息。此字段可用于存储管理员希望与此特定用户关联的任何数据。例如,这可以是用户的全名或员工 ID。 |
| 阵列 | 授予用户的角色。可以指定一个空数组 |
| 布尔 | 可选。指示对密码进行摘要处理的是服务器还是客户端。 如果为 true,服务器会从客户端接收未加密的密码,然后对此密码进行加密。 如果为 false,客户端将对密码进行摘要处理并将处理后的密码传递到服务器。不兼容于 默认值为 |
| 文档 | |
| 阵列 | 可选。服务器对创建的用户实施的身份验证限制。指定 IP 地址和 CIDR 范围列表,允许这些地址和范围的用户连接至服务器或者服务器接受这些用户。 |
| 阵列 | 可选。指定特定的 SCRAM 机制或用于创建 SCRAM 用户档案的机制。如果指定了 有效值为:
featureCompatibilityVersion featureCompatibilityVersion |
| 布尔 | 可选。指示对密码进行摘要处理的是服务器还是客户端。 如果为 true,服务器会从客户端接收未加密的密码,然后对此密码进行加密。 如果为 false,客户端将对密码进行摘要处理并将处理后的密码传递到服务器。不兼容于 默认值为 |
| any | 可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:
注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。 |
角色
要指定运行 createUser
的同一数据库中存在的角色,可以使用角色名称指定角色:
"readWrite"
或者,可以使用文档指定角色,如下所示:
{ role: "<role>", db: "<database>" }
要指定存在于其他数据库中的角色,请使用文档指定该角色。
authenticationRestrictions
authenticationRestrictions
文档只能包含以下字段。如果 authenticationRestrictions
文档包含无法识别的字段,服务器会引发错误:
字段名称 | 值 | 说明 |
---|---|---|
| IP 地址和/或 CIDR 范围的数组 | 如果存在,则在对用户进行身份验证时,服务器会验证客户端的 IP 地址是否在给定列表中或属于列表中的 CIDR 范围。如果客户端的 IP 地址不存在,服务器不会对用户进行身份验证。 |
| IP 地址和/或 CIDR 范围的数组 | 客户端可以连接的 IP 地址或 CIDR 范围列表。如果存在,服务器将验证客户端的连接是否已通过给定列表中的 IP 地址接受。如果通过无法识别的 IP 地址接受连接,服务器不会对用户进行身份验证。 |
重要
如果用户继承的多个角色具有不兼容的身份验证限制,则该用户将不可用。
例如,如果用户继承了一个角色(其中 clientSource
字段为 ["198.51.100.0"]
)和另一个角色(其中 clientSource
字段为 ["203.0.113.0"]
),则服务器无法对该用户进行身份验证。
有关MongoDB中身份身份验证的更多信息,请参阅自托管部署上的身份验证。
行为
用户 ID
MongoDB 会在创建时自动为用户分配唯一的 userId
。
加密
警告
默认情况下,createUser
以明文形式将所有指定数据发送到 MongoDB 实例,即使使用 passwordPrompt()
也是如此。使用 TLS 传输加密来保护客户端和服务器之间的通信,包括 createUser
发送的密码。有关启用 TLS 传输加密的操作说明,请参阅为 TLS/SSL 配置 mongod
和 mongos
。
MongoDB 不以明文形式存储密码。仅当未启用 TLS 传输加密时,密码才会在客户端与服务器之间的传输过程中容易受到攻击。
外部档案
在$external
数据库上创建的用户应将档案存储在 MongoDB 外部,例如使用 Kerberos 的 MongoDB Enterprise 安装。
要对 $external
身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证,用户名不能大于 10k 字节。
local
Database
不能在本地数据库中创建用户。
用户名限制
用户名必须至少包含一个字符,且不能大于 7MB。
必需的访问权限
要在数据库中创建新用户,您必须对该数据库资源执行
createUser
操作。
userAdmin
和 userAdminAnyDatabase
内置角色提供对资源的 createUser
和 grantRole
动作。
例子
以下 createUser
命令将在 products
数据库上创建用户 accountAdmin01
。该命令为 accountAdmin01
赋予 admin
数据库上的 clusterAdmin
和 readAnyDatabase
角色以及 products
数据库上的 readWrite
角色:
提示
您可以将 passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。不过,您仍然可以像使用早期版本的 mongo
shell 一样直接指定密码。
db.getSiblingDB("products").runCommand( { createUser: "accountAdmin01", pwd: passwordPrompt(), customData: { employeeId: 12345 }, roles: [ { role: "clusterAdmin", db: "admin" }, { role: "readAnyDatabase", db: "admin" }, "readWrite" ], writeConcern: { w: "majority" , wtimeout: 5000 } } )