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

在自托管部署上创建用户

本页内容

  • MongoDB Atlas 兼容性
  • 先决条件
  • 步骤
  • 连接并认证
  • 为您的部署创建其他用户
  • 连接到实例并以 myTester 认证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 并作为用户管理员或具有 所需权限 的用户进行认证:

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

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.

退出mongosh作为myUserAdmin后,以myTester重新连接

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

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" }
]
}
)

使用外部身份验证机制(如凯beros)对MongoDB进行身份验证的用户必须在$external数据库中创建,这允许mongosmongod查询外部源进行身份验证。

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

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

以下操作添加了具有只读访问权限的凯beros主体reportingapp@EXAMPLE.NETrecords数据库。

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

提示

另请参阅

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

注意

从MongoDB 8.0开始,LDAP身份验证和授权已弃用。LDAP将保持不变并在MongoDB 8的整个生命周期中继续运行。在未来主要版本中,LDAP将被移除。

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

使用外部认证机制(如LDAP)对MongoDB进行身份验证的用户必须在$external数据库中创建,这允许mongosmongod在认证时咨询外部源。

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

对于LDAP认证,您必须指定一个用户名。您不需要指定密码,因为LDAP服务将处理密码。

以下操作将具有只读访问权限的reporting用户添加到records数据库中。

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

提示

另请参阅

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

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

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

对于x.509客户端证书认证,您必须将客户端证书中的subject值添加为MongoDB用户。每个唯一的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部署创建自定义角色,请参阅自托管部署上的用户和角色管理。

返回

用户