一、概述
要在MongoDB中验证客户端,必须向MongoDB添加相应的用户。
1、用户管理
可以在mongosh使用db.createUser()方法添加用户。您创建的第一个用户必须具有创建其他用户的权限。userAdmin或userAdminAnyDatabase角色都授予创建其他用户的权限。
您可以通过在创建用户时将角色分配给用户来授予用户权限。您还可以通过更新现有用户来授予或撤销角色,以及更新密码。
用户由用户名和相关联的身份验证数据库唯一标识。MongoDB在MongoDB中创建时,会将用户与唯一的userId关联起来。
LDAP托管用户
在LDAP服务器上创建的LDAP管理用户在system.users集合中没有关联的文档,因此没有与其关联的userId字段。
2、身份验证数据库
添加用户时,将在特定数据库中创建该用户。您在其中创建用户的数据库是该用户的身份验证数据库。
但是,用户的权限并不局限于他们的身份验证数据库。因此,用户可以拥有跨不同数据库的权限。有关角色的详细信息,请参见基于角色的访问控制。
用户的名称和身份验证数据库充当该用户的唯一标识符。MongoDB在MongoDB中创建时,会将用户与唯一的userId关联起来。但是,在LDAP服务器上创建的LDAP管理用户在system.users集合中没有关联的文档,因此没有关联的userId字段。
如果两个用户具有相同的名称,但在不同的数据库中创建,则它们是两个独立的用户。如果要让一个用户对多个数据库具有权限,请为每个适用的数据库创建一个具有角色的用户。
3、集中式用户数据
对于在MongoDB中创建的用户,MongoDB将所有用户信息(包括名称、密码和用户的身份验证数据库)存储在管理数据库的system.users集合中。
不要直接修改此集合。要管理用户,请使用指定的用户管理命令。
4、分片群集用户
要为分片集群创建用户,请连接到mongos实例并添加用户。要作为在mongos实例上创建的用户进行身份验证,必须通过mongos示例进行身份验证。
在分片集群中,MongoDB将用户配置数据存储在配置服务器的管理数据库中。
5、共享本地用户
一些维护操作,如cleanupOrphaned、compact或rs.reconfig(),需要直接连接到分片集群中的特定分片。要执行这些操作,必须直接连接到shard并作为shard本地管理用户进行身份验证。
要创建shard本地管理用户,请直接连接到shard的主用户并创建该用户。有关如何创建碎片本地用户管理员的说明,请参阅Deploy Sharded Cluster with Keyfile Authentication教程。
MongoDB将shard本地用户存储在shard本身的管理数据库中。这些shard本地用户独立于通过mongos添加到sharded集群的用户。Shard本地用户是Shard的本地用户,mongos无法访问。
与碎片的直接连接应仅用于特定于碎片的维护和配置,或用于目标分析工作负载。通常,客户端应该通过mongos连接到分片集群。