Docs 主页 → 开发应用程序 → MongoDB Manual
创建一个用户
在此页面上
启用访问控制后,用户需证明自己的身份。您必须授予某一用户一个或多个角色。角色可向用户授予对 MongoDB 资源执行特定操作的特权。
MongoDB 系统的每个应用程序和用户都应映射到一个唯一用户。这种访问隔离原则有利于访问撤销和持续的用户维护。为确保最小特权系统,只授予用户所需的最少特权。
此页面上的用户信息适用于在以下所有环境中托管的部署,除非另有说明:
MongoDB Atlas :用于在云中部署 MongoDB 的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
MongoDB Atlas 限制
以下限制仅适用于 MongoDB Atlas 中托管的部署。如果这些限制对您的组织造成问题,请联系Atlas 支持部门。
可用的 MongoDB Atlas 内置角色和特定权限支持 MongoDB 命令子集。有关更多信息,请参阅M 10 + 集群中不支持的命令。
MongoDB Atlas 支持每个 MongoDB Atlas 项目最多100个数据库用户。如果项目需要100个以上的数据库用户,请联系Atlas 支持部门。
您必须使用Atlas CLI 、 Atlas Administration API 、Atlas UI 或支持的集成来添加、修改或删除 MongoDB Atlas 数据库部署上的数据库用户。否则,MongoDB Atlas 会回滚任何用户修改。
先决条件
要创建用户,您需要:
对于常规用户创建,您必须拥有以下权限:
要在数据库中创建新用户,您必须对数据库资源执行
createUser
操作。
userAdmin
和 userAdminAnyDatabase
内置角色提供对资源的 createUser
和 grantRole
动作。
要为 MongoDB Atlas 创建用户,您必须具有对 MongoDB Atlas 的组织所有者或项目所有者访问权限。这些角色是 MongoDB Atlas 特有的,并且与数据库用户分开。要了解更多信息,请参阅Atlas 用户角色。
步骤
MongoDB Atlas 配置数据库用户
MongoDB Atlas 项目可以让用户使用不同的身份验证方法。
创建用户后便无法更改此用户的身份验证方法。 要使用备用身份验证方法,必须创建一个新用户。
为 MongoDB Atlas 部署配置使用 SCRAM 身份验证的数据库用户:
为自托管部署配置用户
要为自托管 MongoDB Enterprise 或 MongoDB Community 部署配置数据库用户,请执行以下步骤:
连接和身份验证
使用mongosh
连接到主节点mongod
,或者在分片集群中连接到mongos
并以用户管理员或具有所需权限的用户身份进行身份验证:
为部署创建其他用户
以用户管理员身份进行身份验证后,使用 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
。
提示
另请参阅:
其他示例
用户名/密码验证
以下操作将在 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 身份验证
使用外部身份验证机制(例如 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 身份验证的更多信息,请参阅以下教程:
要了解有关为 MongoDB Atlas 设置 LDAP 身份验证的更多信息,请参阅 MongoDB Atlas 文档中的添加数据库用户。
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 部署设置 x.509 客户端证书身份验证的更多信息,请参阅以下教程:
了解有关设置 x 的更多信息。 509 MongoDB Atlas 的客户端证书身份验证,请参阅 MongoDB Atlas 文档中的添加数据库用户。
后续步骤
要为自托管的 MongoDB Enterprise 或 MongoDB 社区版部署用户、分配角色和创建自定义角色,请参阅管理用户和角色。