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

在自管理部署上创建用户

在此页面上

  • MongoDB Atlas 兼容性
  • 先决条件
  • 步骤
  • 连接和身份验证
  • 为部署创建其他用户
  • 连接到此实例并以 myTester
  • 以以下用户身份插入文档: myTester
  • 其他示例
  • 用户名/密码验证
  • Kerberos 身份验证
  • LDAP 身份验证
  • x.509 客户端证书身份验证
  • 后续步骤

启用访问控制后,用户需要证明自己的身份。您必须授予某一用户一个或多个 角色 。角色授予用户对 MongoDB 资源 执行某些 操作 的 特权 。

MongoDB 系统的每个应用程序和用户都应映射到一个唯一用户。这种访问隔离原则有利于访问撤销和持续的用户维护。为确保最小特权系统,只授予用户所需的最少特权。

除非另有说明,否则此页面上的用户信息适用于以下所有环境中托管的自托管部署:

  • MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本

  • MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本

以下限制仅适用于 MongoDB Atlas 中托管的部署。如果其中任何限制对您的组织造成问题,请联系 Atlas 支持部门。

要创建用户,您需要:

对于常规用户创建,您必须拥有以下权限:

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

注意

以下过程将使用 SCRAM 身份验证。有关其他身份验证机制的更多信息,请参阅其他示例。

要为自管理的 MongoDB Enterprise 或 MongoDB Community 部署配置数据库用户,请执行以下步骤:

1

使用 mongosh,连接到主节点 mongod,或者在分片集群中连接到 mongos,并以用户管理员或具有所需特权的用户身份进行身份验证:

使用 -u <username>-p--authenticationDatabase <database> 命令行选项启动 mongosh

mongosh --port 27017 --authenticationDatabase \
"admin" -u "myUserAdmin" -p

根据提示输入密码。

使用 mongosh 连接到您的数据库部署:

mongosh --port 27017

mongosh中,切换到身份验证数据库(在本例中为admin ),并使用db.auth(<username>, <pwd>)方法进行身份验证:

use admin
db.auth("myUserAdmin", passwordPrompt()) // or cleartext password

提示

passwordPrompt() 方法会提示您输入密码。您也可以直接将密码指定为字符串。我们建议您使用 passwordPrompt() 方法,避免将密码显示在屏幕上,也避免可能将密码泄露到 Shell 历史记录中。

根据提示输入密码。

2

注意

以下步骤使用 SCRAM 身份验证。有关其他身份验证机制的更多信息,请参阅其他示例。

以用户管理员身份进行身份验证后,使用 db.createUser() 方法创建其他用户。您可以向用户分配任何内置角色用户定义的角色

以下操作将用户 myTester 添加到 test 数据库,该用户在 test 数据库中具有 readWrite 角色,在 reporting 数据库中具有 read 角色。

use test
db.createUser(
{
user: "myTester",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)

提示

passwordPrompt() 方法会提示您输入密码。您也可以直接将密码指定为字符串。我们建议您使用 passwordPrompt() 方法,避免将密码显示在屏幕上,也避免可能将密码泄露到 Shell 历史记录中。

在其内创建此用户的数据库(在此示例中为 test)便是该用户的身份验证数据库。虽然此用户会通过此数据库的身份验证,但该用户还可能会在其他数据库中拥有角色。此用户的身份验证数据库不会限制该用户的特权。

在创建该新增用户后,请退出 mongosh

3

重要

无法在同一 mongosh 会话中切换用户。以不同用户身份进行身份验证意味着该会话拥有两个经过身份验证的用户的特权。要在用户之间切换,请退出并重新启动 mongosh

myUserAdmin 身份退出 mongosh 后,以 myTester 身份重新连接:

使用 -u <username>-p--authenticationDatabase <database> 命令行选项启动 mongosh

mongosh --port 27017 -u "myTester" \
--authenticationDatabase "test" -p

根据提示输入用户密码。

使用 mongosh 连接到您的数据库部署:

mongosh --port 27017

mongosh中,切换到身份验证数据库(在本例中为admin ),并使用db.auth(<username>, <pwd>)方法进行身份验证:

use test
db.auth("myTester", passwordPrompt()) // or cleartext password

提示

passwordPrompt() 方法会提示您输入密码。您也可以直接将密码指定为字符串。我们建议您使用 passwordPrompt() 方法,避免将密码显示在屏幕上,也避免可能将密码泄露到 Shell 历史记录中。

根据提示输入用户密码。

4

作为用户 myTester,您有权在 test 数据库中执行读取和写入操作(以及在 reporting 数据库中执行读取操作)。完成身份验证并认证为 myTester 后,将文档插入 test 数据库中的一个集合。例如,您可以在 test 数据库中执行以下插入操作:

db.foo.insertOne( { x: 1, y: 1 } )

提示

另请参阅:

以下操作将在 reporting 数据库中创建具有指定名称、密码和角色的用户。

提示

passwordPrompt() 方法会提示您输入密码。您也可以直接将密码指定为字符串。我们建议您使用 passwordPrompt() 方法,避免将密码显示在屏幕上,也避免可能将密码泄露到 Shell 历史记录中。

use reporting
db.createUser(
{
user: "reportsUser",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "read", db: "reporting" },
{ role: "read", db: "products" },
{ role: "read", db: "sales" },
{ role: "readWrite", db: "accounts" }
]
}
)

使用外部身份验证机制(例如 Kerberos)进行 MongoDB 身份验证的用户,必须在 $external 数据库中创建,这样 mongosmongod 可以咨询外部来源进行身份验证。

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

对于 Kerberos 身份验证,您必须添加 Kerberos 主体作为用户名。您不需要指定密码。

以下操作将有只读访问权限的 Kerberos 主体 reportingapp@EXAMPLE.NET 添加至 records 数据库:

use $external
db.createUser(
{
user: "reportingapp@EXAMPLE.NET",
roles: [
{ role: "read", db: "records" }
]
}
)

提示

另请参阅:

有关为 MongoDB 部署设置 Kerberos 身份验证的更多信息,请参阅以下教程:

注意

从MongoDB 8.0开始, LDAP身份验证和授权已弃用。 LDAP可用并将在MongoDB 8的整个生命周期内继续运行而不进行更改。 LDAP将在未来的主要发布中删除。

有关详细信息,请参阅LDAP弃用。

使用外部身份验证机制(例如 LDAP)进行 MongoDB 身份验证的用户,必须在 $external 数据库中创建,这样 mongosmongod 可以咨询外部来源进行身份验证。

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

对于 LDAP 身份验证,您必须指定用户名。您无需指定密码,因为这将由 LDAP 服务处理。

以下操作会添加对 records数据库拥有只读访问权限的 reporting 用户:

use $external
db.createUser(
{
user: "reporting",
roles: [
{ role: "read", db: "records" }
]
}
)

提示

另请参阅:

有关为 MongoDB 部署设置 LDAP 身份验证的更多信息,请参阅以下教程:

使用外部身份验证机制(例如 x.509 客户端证书身份验证)进行 MongoDB 身份验证的用户,必须在 $external 数据库中创建,这样 mongosmongod 可以咨询外部来源进行身份验证。

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

对于 x.509 客户端证书身份验证,您必须以 MongoDB 用户身份从客户端证书中添加 subject 的值。每个唯一的 x.509 客户端证书对应一个 MongoDB 用户。您不需要指定密码。

以下操作将具有只读访问权限的客户端证书主题 CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry 用户添加至 records 数据库。

use $external
db.createUser(
{
user: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry",
roles: [
{ role: "read", db: "records" }
]
}
)

提示

另请参阅:

有关为 MongoDB 部署设置 x.509 客户端证书身份验证的更多信息,请参阅以下教程:

要为自管理的 MongoDB Enterprise 或 MongoDB Community 部署管理用户、分配角色和创建自定义角色,请参阅管理自管理部署的用户和角色。

后退

用户(User)