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