自行管理部署中的用户
要在MongoDB中验证客户端,您必须向MongoDB添加相应的用户。
用户管理
您可以使用db.createUser()
方法使用mongosh
。您创建的第一个用户必须具有创建其他用户的权限。具有userAdmin
或userAdminAnyDatabase
角色的用户都拥有创建其他用户的权限。
您可以在创建用户时为用户分配角色来授予用户权限。您还可以通过更新现有用户来授予或撤销角色、更新密码。有关用户管理方法的完整列表,请参阅用户管理。
用户通过用户名及其相关的认证数据库进行唯一标识。MongoDB在用户创建时将其与唯一的userId
关联。
LDAP管理用户
LDAP服务器上创建的管理用户在系统用户集合中没有关联的文档,因此没有与之关联的userId
字段。
认证数据库
添加用户时,您会在特定的数据库中创建用户。您创建用户的数据库是该用户的认证数据库。
然而,用户的权限并不仅限于他们的认证数据库。因此,用户可以在不同的数据库中拥有权限。有关角色的更多信息,请参阅自托管部署中的基于角色的访问控制。
用户名和认证数据库是该用户的唯一标识。MongoDB在MongoDB中创建用户时将其与唯一的userId
关联。然而,在LDAP服务器上创建的LDAP管理用户在系统用户集合中没有关联的文档,因此没有与之关联的userId
字段。
如果两个用户具有相同的名称但创建在不同的数据库中,则它们是两个不同的用户。如果您希望单个用户在多个数据库中具有权限,请为每个适用的数据库创建单个用户并分配角色。
集中用户数据
对于在MongoDB中创建的用户,MongoDB将所有用户信息,包括 名称
、密码
以及用户的 认证数据库
,存储在 admin
数据库中的 system.users 集合中。
不要直接修改此集合。要管理用户,请使用指定的 用户管理命令。
分片集群用户
要为分片集群创建用户,连接到 mongos
实例并添加用户。要作为在 mongos
实例上创建的用户进行认证,您必须通过 mongos
实例进行认证。
在分片集群中,MongoDB将用户配置数据存储在 配置服务器 的 admin
数据库中。
分片本地用户
某些维护操作,例如 compact
或 rs.reconfig()
,需要直接连接到分片集群中的特定分片。要执行这些操作,您必须直接连接到分片并作为 分片本地 管理员用户进行身份验证。
要创建一个 分片本地 管理员用户,请直接连接到分片的主节点并创建用户。有关如何创建分片本地用户管理员的说明,请参阅 使用密钥文件认证部署自管理分片集群 教程。
MongoDB 将 分片本地 用户存储在分片自身的 admin
数据库中。这些 分片本地 用户与通过 mongos
添加到分片集群的用户是独立的。分片本地 用户是本地于分片的,并且无法通过 mongos
访问。
从 MongoDB 8.0 开始,您可以使用 directShardOperations
角色执行需要直接针对分片执行命令的维护操作。
应仅将分片直接连接用于分片特定的维护和配置。通常,客户端应通过 mongos
连接到分片集群。
警告
使用 directShardOperations
角色运行命令可能导致您的集群停止正常工作并可能造成数据损坏。仅将 directShardOperations
角色用于维护目的或在 MongoDB 支持的指导下使用。完成维护操作后,停止使用 directShardOperations
角色。