createUser
定义
createUser
在运行此命令的数据库中创建新用户。如果用户已存在,则
createUser
命令会返回一个重复用户错误。提示
在
mongosh
中,此命令也可以通过db.createUser()
辅助方法运行.辅助方法对
mongosh
用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要便利性或需要额外的返回字段的情况下,请使用数据库命令。
兼容性
此命令在以下环境中部署可用
MongoDB Atlas:云中MongoDB部署的全托管服务
重要
此命令不支持M0、M2、M5和M10+集群。有关更多信息,请参阅不支持命令。
MongoDB企业版:基于订阅的自托管MongoDB版本
MongoDB社区版:开源、免费使用并自托管的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
包含以下字段
字段 | 类型 | 描述 |
---|---|---|
createUser | string | 新用户的名称。 |
pwd | string | 用户的密码。如果您在 值可以是以下之一
您可以使用 |
customData | document | 可选。任意信息。此字段可以用于存储管理员希望与特定用户关联的任何数据。例如,这可以是用户的全名或员工编号。 |
roles | array | 授予用户的角色。可以指定空数组 [] 来创建没有角色的用户。 |
digestPassword | boolean | 可选。指示服务器或客户端是否消化密码。 如果为 true,则服务器从客户端接收未消化的密码并消化密码。 如果为 false,则客户端消化密码并将消化的密码传递给服务器。与 默认值为 |
writeConcern | document | 可选。操作的写入关注级别。请参阅 写入关注规范。 |
authenticationRestrictions | array | 可选。服务器对创建的用户实施的身份验证限制。指定允许用户连接到服务器或服务器可以接受用户的 IP 地址列表和CIDR 范围。 |
mechanisms | array | 可选。指定用于创建 SCRAM 用户凭据的特定 SCRAM 机制或机制。如果指定了 有效值
featureCompatibilityVersion 的默认值是 featureCompatibilityVersion 的默认值是 |
digestPassword | boolean | 可选。指示服务器或客户端是否消化密码。 如果为 true,则服务器从客户端接收未消化的密码并消化密码。 如果为 false,则客户端消化密码并将消化的密码传递给服务器。与 默认值为 |
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中认证的更多信息,请参阅自管理部署上的认证。
行为
用户 ID
MongoDB在创建用户时自动为用户分配一个唯一的 userId
。
加密
警告
默认情况下,createUser
将所有指定数据以明文形式发送到MongoDB实例,即使使用 passwordPrompt()
。使用TLS传输加密来保护客户端和服务器之间的通信,包括由 createUser
发送的密码。有关启用TLS传输加密的说明,请参阅配置 mongod
和 mongos
以TLS/SSL。
MongoDB不会以明文形式存储密码。密码只有在客户端和服务器之间传输时才会受到威胁,并且只有在未启用TLS传输加密的情况下才会受到威胁。
外部凭证
在$external
数据库上创建的用户应该在外部存储凭证,例如,使用使用Kerberos的MongoDB企业版安装。
为了使用$external
认证用户(Kerberos、LDAP或x.509用户)与客户端会话和因果一致性保证,用户名不能超过10k字节。
local
数据库
您不能在本地数据库上创建用户。
用户名限制
用户名必须至少包含一个字符,且不能超过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 } } )