自管理部署中的用户
要对 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
角色。