在自管理部署上创建用户
在此页面上
启用访问控制后,用户需证明自己的身份。您必须授予用户一个或多个 角色。角色可向用户授予对 MongoDB 资源执行特定操作的特权。
MongoDB 系统的每个应用程序和用户都应映射到一个唯一用户。这种访问隔离原则有利于访问撤销和持续的用户维护。为确保最小特权系统,只授予用户所需的最少特权。
除非另有说明,否则此页面上的用户信息适用于以下所有环境中托管的自托管部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
MongoDB Atlas兼容性
以下限制仅应用于MongoDB Atlas中托管的部署。 如果其中任何限制对您的组织造成问题,请联系 Atlas支持。
您必须使用Atlas CLI 、 Atlas Administration API 、 Atlas 用户界面或支持的集成来添加、修改或删除MongoDB Atlas集群上的数据库用户。 否则, MongoDB Atlas会回滚任何用户修改。 要在MongoDB Atlas中添加用户,请参阅MongoDB Atlas文档中的添加数据库用户。
可用的 MongoDB Atlas 内置角色和特定权限支持 MongoDB 命令的子集。有关更多信息,请参阅 M10+ 集群中不支持的命令。
在 MongoDB Atlas 中,每个 MongoDB Atlas 项目最多支持 100 个数据库用户。如果一个项目需要超过 100 个数据库用户,请联系 Atlas 支持部门。
先决条件
要创建用户,您需要:
对于常规用户创建,您必须拥有以下权限:
要在数据库中创建新用户,您必须对数据库资源执行
createUser
操作。
userAdmin
和 userAdminAnyDatabase
内置角色提供对资源的 createUser
和 grantRole
动作。
步骤
要为自管理的MongoDB Enterprise或MongoDB Community部署配置数据库用户,请按照以下步骤操作:
连接和身份验证
使用 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 历史记录中。
根据提示输入密码。
为部署创建其他用户
以用户管理员身份进行身份验证后,使用 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
。
连接到此实例并以 myTester
以 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 历史记录中。
根据提示输入用户密码。
其他示例
用户名/密码验证
以下操作将在 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 身份验证
使用外部身份验证机制(例如 Kerberos)进行 MongoDB 身份验证的用户,必须在 $external
数据库中创建,这样 mongos
或 mongod
可以咨询外部来源进行身份验证。
要对 $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 身份验证的更多信息,请参阅以下教程:
LDAP 身份验证
注意
从MongoDB 8.0开始, LDAP身份验证和授权已弃用。 LDAP可用并将在MongoDB 8的整个生命周期内继续运行而不进行更改。 LDAP将在未来的主要发布中删除。
有关详细信息,请参阅 LDAP 弃用。
使用外部身份验证机制(例如 LDAP)进行 MongoDB 身份验证的用户,必须在 $external
数据库中创建,这样 mongos
或 mongod
可以咨询外部来源进行身份验证。
要对 $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 客户端证书身份验证
使用外部身份验证机制(例如 x.509 客户端证书身份验证)进行 MongoDB 身份验证的用户,必须在 $external
数据库中创建,这样 mongos
或 mongod
可以咨询外部来源进行身份验证。
要对 $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 Enterprise或MongoDB Community部署管理用户、分配角色和创建自定义角色,请参阅管理自管理部署的用户和角色。