On this page
db.createUser()
在本页面
Definition
db.
createUser
(* user , writeConcern *)- 为运行该方法的数据库创建一个新用户。如果该用户已经存在于数据库中,则db.createUser()返回重复用户错误。
db.createUser()方法具有以下语法:
Field | Type | Description |
---|---|---|
user |
document | 该文档包含有关要创建的用户的身份验证和访问信息。 |
writeConcern |
document | 可选的。创建操作的write concern级别。 writeConcern 文档具有与getLastError命令相同的字段。 |
user
文档定义了用户,其格式如下:
{
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>" | "<CIDR range>", ...]
},
...
]
}
user
文档具有以下字段:
Field | Type | Description |
---|---|---|
user |
string | 新用户的名称。 |
pwd |
string | 用户密码。如果您在$external 数据库上运行db.createUser()以创建将凭据存储在 MongoDB 外部的用户,则pwd 字段不是必需的。 |
customData |
document | 可选的。任何任意信息。该字段可用于存储 Management 员希望与此特定用户关联的任何数据。例如,这可以是用户的全名或员工 ID。 |
roles |
array | 授予用户的角色。可以指定一个空数组[] 来创建没有角色的用户。 |
authenticationRestrictions | array | 可选的。服务器对创建的用户强制执行的身份验证限制。指定允许用户连接到服务器或服务器可以接受用户的 IP 地址和 CIDR 范围的列表。 |
3.6 版中的新功能。
Roles
在roles
字段中,您可以同时指定built-in roles和user-defined roles。
要指定运行db.createUser()的同一数据库中存在的角色,可以使用该角色的名称指定该角色:
"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。
db.createUser()方法包装createUser命令。
Behavior
User Id
从版本 3.6.13 开始,MongoDB 在创建时会自动为用户分配一个唯一的userId
。
Replica set
如果在副本集上运行,默认情况下将使用majority写关注来执行db.createUser()。
Encryption
Warning
默认情况下,db.createUser()以明文形式将所有指定的数据发送到 MongoDB 实例。使用 TLS 传输加密来保护 Client 端和服务器之间的通信,包括db.createUser()发送的密码。有关启用 TLS 传输加密的说明,请参见为 TLS/SSL 配置 mongod 和 mongos。
MongoDB 不会以明文形式存储密码。仅在未启用 TLS 传输加密的情况下,该密码仅在 Client 端和服务器之间的传输中容易受到攻击。
External Credentials
在$external
数据库上创建的用户应将凭据存储在 MongoDB 外部,例如使用 Kerberos 的 MongoDB Enterprise 安装。
在版本 3.6.3 中更改:要与$external
个身份验证用户(即 Kerberos,LDAP,x.509 用户)一起使用会话,用户名不能超过 10k 字节。
local Database
您不能在本地数据库上创建用户。
Required Access
要在数据库中创建新用户,您必须在database resource上拥有createUser action。
userAdmin和userAdminAnyDatabase内置角色在其各自的resources上提供createUser和grantRole动作。
Examples
以下db.createUser()操作在products
数据库上创建accountAdmin01
用户。
use products
db.createUser( { user: "accountAdmin01",
pwd: "changeMe",
customData: { employeeId: 12345 },
roles: [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite"] },
{ w: "majority" , wtimeout: 5000 } )
该操作赋予accountAdmin01
以下角色:
admin
数据库上的clusterAdmin
和readAnyDatabase
角色products
数据库上的readWrite
角色
创建具有角色的用户
以下操作在products
数据库中创建accountUser
并为用户提供readWrite
和dbAdmin
角色。
use products
db.createUser(
{
user: "accountUser",
pwd: "password",
roles: [ "readWrite", "dbAdmin" ]
}
)
创建没有角色的用户
以下操作在admin
数据库中创建一个名为reportsUser
的用户,但尚未分配角色:
use admin
db.createUser(
{
user: "reportsUser",
pwd: "password",
roles: [ ]
}
)
创建具有角色的 Management 用户
以下操作在admin
数据库中创建一个名为appAdmin
的用户,并向该用户readWrite
访问config
数据库,这使用户可以更改分片群集的某些设置,例如平衡器设置。
use admin
db.createUser(
{
user: "appAdmin",
pwd: "password",
roles:
[
{ role: "readWrite", db: "config" },
"clusterAdmin"
]
}
)
创建具有身份验证限制的用户
以下操作在admin
数据库中创建一个名为restricted
的用户。仅当从 IP 地址192.0.2.0
连接到 IP 地址198.51.100.0
时,该用户才可以进行身份验证。
use admin
db.createUser(
{
user: "restricted",
pwd: "password",
roles: [ ],
authenticationRestrictions: [ {
clientSource: ["192.0.2.0"],
serverAddress: ["198.51.100.0"]
} ]
}
)