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

createUser

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 必需的访问权限
  • 例子
createUser

在运行命令的数据库上创建新用户。 如果用户存在, createUser命令将返回重复用户错误。

提示

mongosh中,该命令也运行通过 db.createUser()辅助方法运行。

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

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

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

重要

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

该命令具有以下语法:

提示

您可以将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 有以下字段:

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

用户的密码。如果您在 $external 数据库上运行 createUser,以创建凭证存储在 MongoDB 外部的用户,则无需 pwd 字段。

该值可为以下任一项:

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

customData
文档
可选。任意信息。此字段可用于存储管理员希望与此特定用户关联的任何数据。例如,这可以是用户的全名或员工 ID。
roles
阵列
授予用户的角色。可以指定一个空数组 [],以创建无角色的用户。
digestPassword
布尔

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

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

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

默认值为 true

writeConcern
文档

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

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

可选。指定特定的 SCRAM 机制或用于创建 SCRAM 用户档案的机制。如果指定了authenticationMechanisms,则只能指定authenticationMechanisms的子集。

有效值为:

  • "SCRAM-SHA-1"

  • 使用 SHA-1 哈希函数。

  • "SCRAM-SHA-256"

  • 使用 SHA-256 哈希函数。

  • 需将 featureCompatibilityVersion 设为 4.0

  • 要求 DigestPassword 设置为 true

featureCompatibilityVersion 4.0 的默认值为 SCRAM-SHA-1SCRAM-SHA-256

featureCompatibilityVersion 3.6 的默认值为 SCRAM-SHA-1

digestPassword
布尔

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

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

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

默认值为 true

comment
any

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

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

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

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

"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中身份身份验证的更多信息,请参阅自托管部署上的身份验证。

MongoDB 会在创建时自动为用户分配唯一的 userId

警告

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

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

$external数据库上创建的用户应将档案存储在 MongoDB 外部,例如使用 Kerberos 的 MongoDB Enterprise 安装。

要对 $external 身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证,用户名不能大于 10k 字节。

不能在本地数据库中创建用户。

用户名必须至少包含一个字符,且不能大于 7MB。

userAdminuserAdminAnyDatabase 内置角色提供对资源createUsergrantRole 动作。

以下 createUser 命令将在 products 数据库上创建用户 accountAdmin01。该命令为 accountAdmin01 赋予 admin 数据库上的 clusterAdminreadAnyDatabase 角色以及 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 }
} )

后退

用户管理