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

createUser

在本页

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 所需访问权限
  • 示例
createUser

在运行此命令的数据库中创建新用户。如果用户已存在,则createUser命令会返回一个重复用户错误。

提示

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

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

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

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

重要

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

该命令有以下语法

提示

您可以使用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
string
新用户的名称。
pwd
string

用户的密码。如果您在 $external 数据库上运行 createUser 来创建具有外部存储凭据的用户,则不需要 pwd 字段。

值可以是以下之一

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

customData
document
可选。任意信息。此字段可以用于存储管理员希望与特定用户关联的任何数据。例如,这可以是用户的全名或员工编号。
roles
array
授予用户的角色。可以指定空数组 [] 来创建没有角色的用户。
digestPassword
boolean

可选。指示服务器或客户端是否消化密码。

如果为 true,则服务器从客户端接收未消化的密码并消化密码。

如果为 false,则客户端消化密码并将消化的密码传递给服务器。与 SCRAM-SHA-256 不兼容。

默认值为 true

writeConcern
document

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

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

可选。指定用于创建 SCRAM 用户凭据的特定 SCRAM 机制或机制。如果指定了 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
boolean

可选。指示服务器或客户端是否消化密码。

如果为 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传输加密的说明,请参阅配置 mongodmongos 以TLS/SSL。

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

$external数据库上创建的用户应该在外部存储凭证,例如,使用使用Kerberos的MongoDB企业版安装

为了使用$external认证用户(Kerberos、LDAP或x.509用户)与客户端会话和因果一致性保证,用户名不能超过10k字节。

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

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

  • 要在数据库中创建新用户,您必须拥有该数据库资源的 createUser 操作

  • 要向用户分配角色,您必须拥有角色数据库的 grantRole 操作

userAdminuserAdminAnyDatabase 内置角色提供它们各自资源上的 createUsergrantRole 操作。

以下 createUser 命令在 products 数据库中创建用户 accountAdmin01。该命令为 accountAdmin01admin 数据库中分配 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 }
} )

返回

用户管理