在自托管部署上创建用户
本页内容
启用访问控制后,用户必须验证身份。您必须授予用户一个或多个角色。角色授予用户在MongoDB 资源上执行某些 操作 的权限。
MongoDB系统的每个应用程序和用户都应映射到唯一的用户。这种访问隔离原则有助于访问撤销和持续的用户维护。为了确保最小权限系统,只授予用户所需的最小权限集。
此页面上的用户信息适用于以下所有环境中托管的自我管理的部署,除非另有说明
MongoDB Enterprise:基于订阅的、自我管理的MongoDB版本
MongoDB Community:源代码可用的、免费使用和自我管理的MongoDB版本
MongoDB Atlas 兼容性
以下限制仅适用于在MongoDB Atlas中托管的部署。如果这些限制给您组织带来问题,请联系Atlas 支持.
您必须使用Atlas CLI、Atlas 管理API、Atlas UI或支持的集成来添加、修改或删除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
并作为用户管理员或具有 所需权限 的用户进行认证:
使用 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历史记录中。
按提示输入密码。
为您的部署创建其他用户
在以用户管理员身份进行身份验证后,使用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
身份进行认证
退出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历史记录中。
当提示输入时,请输入用户密码。
其他示例
用户名/密码认证
以下操作在 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身份验证
使用外部身份验证机制(如凯beros)对MongoDB进行身份验证的用户必须在$external
数据库中创建,这允许mongos
或mongod
查询外部源进行身份验证。
要使用客户端会话和因果一致性保证
与$external
身份验证用户(凯beros、LDAP或x.509用户),用户名不能超过10k字节。
对于凯beros身份验证,您必须将凯beros主体作为用户名。您不需要指定密码。
以下操作添加了具有只读访问权限的凯beros主体reportingapp@EXAMPLE.NET
到records
数据库。
use $external db.createUser( { user: "reportingapp@EXAMPLE.NET", roles: [ { role: "read", db: "records" } ] } )
提示
另请参阅
有关为MongoDB部署设置凯beros身份验证的更多信息,请参阅以下教程:
LDAP身份验证
注意
从MongoDB 8.0开始,LDAP身份验证和授权已弃用。LDAP将保持不变并在MongoDB 8的整个生命周期中继续运行。在未来主要版本中,LDAP将被移除。
有关详细信息,请参阅LDAP弃用。
使用外部认证机制(如LDAP)对MongoDB进行身份验证的用户必须在$external
数据库中创建,这允许mongos
或mongod
在认证时咨询外部源。
要使用客户端会话和因果一致性保证
与$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客户端证书认证
使用外部认证机制(如x.509客户端证书认证)对MongoDB进行身份验证的用户必须在$external
数据库中创建,这允许mongos
或mongod
在认证时咨询外部源。
要使用客户端会话和因果一致性保证
与$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 Enterprise或MongoDB Community部署创建自定义角色,请参阅自托管部署上的用户和角色管理。