Users

在本页面

要对 MongoDB 中的 Client 端进行身份验证,必须将相应的用户添加到 MongoDB 中。

用户 Management 界面

要添加用户,MongoDB 提供了db.createUser()方法。添加用户时,您可以将roles分配给该用户以授予特权。

Note

在数据库中创建的第一个用户应该是具有 Management 其他用户权限的用户 Management 员。参见Enable Auth

您还可以更新现有用户,例如更改密码以及授予或撤消角色。有关用户 Management 方法的完整列表,请参见User Management

用户由用户名和关联的身份验证数据库唯一标识。从 MongoDB 3.6.13 开始,为 MongoDBManagement 的用户分配了唯一的userId[1]

Authentication Database

添加用户时,可以在特定数据库中创建该用户。该数据库是用户的身份验证数据库。

用户可以在不同的数据库中拥有特权;也就是说,用户的权限不限于其身份验证数据库。通过分配其他数据库中的用户角色,在一个数据库中创建的用户可以有权对其他数据库进行操作。有关角色的更多信息,请参见基于角色的访问控制

用户名和身份验证数据库用作该用户的唯一标识符。 [1]也就是说,如果两个用户具有相同的名称,但在不同的数据库中创建,则它们是两个单独的用户。如果打算让一个用户在多个数据库上具有权限,请在适用的数据库中创建一个具有角色的单个用户,而不是在不同的数据库中多次创建该用户。

[1](1, 2)


从版本 3.6.13 开始,MongoDB 3.6 在 MongoDB 中创建时将用户与唯一的userId关联。
在 LDAP 服务器上创建的LDAP 托管用户system.users集合中没有关联的文档,因此也没有与之关联的userId字段。

验证用户

要以用户身份进行身份验证,您必须提供用户名,密码和与该用户关联的authentication database

要使用mongo shell 进行身份验证,请执行以下任一操作:

Important

作为不同用户进行多次身份验证不会**丢弃先前已身份验证的用户的凭据。这可能导致连接具有比用户预期更多的权限,并导致logical session内的操作引发错误。

有关使用 MongoDB 驱动程序进行身份验证的示例,请参见driver documentation

集中的用户数据

在 2.6 版中进行了更改。

对于在 MongoDB 中创建的用户,MongoDB 将所有用户信息(包括namepassword用户的认证数据库)存储在admin数据库的system.users集合中。

不要直接访问此集合,而应使用用户 Management 命令

分片群集用户

要为分片群集创建用户,请连接到mongos实例并添加用户。然后,Client 端通过mongos实例对这些用户进行身份验证。

在 2.6 版中进行了更改:MongoDB 将这些分片的集群用户数据存储在config serversadmin数据库中。以前,用于对分片群集上的数据库进行身份验证的凭据位于该数据库的primary shard上。

分片本地用户

但是,某些维护操作(例如cleanupOrphanedcompactrs.reconfig())需要直接连接到分片群集中的特定分片。要执行这些操作,您必须直接连接到分片并以* shard local *Management 用户身份进行身份验证。

要创建* shard local Management 用户,请直接连接到 shard 并创建该用户。 MongoDB 将 shard local *用户存储在 shard 本身的admin数据库中。

这些* shard local *用户完全独立于通过mongos添加到分片集群的用户。 * Shard Local *用户是 Shard 的本地用户,并且mongos无法访问。

与分片的直接连接仅应用于分片特定的维护和配置。通常,Client 端应通过mongos连接到分片群集。

Localhost Exception

localhost 异常允许您启用访问控制,然后在系统中创建第一个用户。除了 localhost 异常,在启用访问控制后,连接到 localhost 接口并在admin数据库中创建第一个用户。第一个用户必须具有创建其他用户(例如具有userAdminuserAdminAnyDatabase角色的用户)的特权。

在版本 3.4 中进行了更改:MongoDB 3.4 扩展了 localhost 异常,以允许执行db.createRole()方法。此方法允许用户通过 LDAP 授权在 MongoDB 内部创建一个角色,该角色 Map 到 LDAP 中定义的角色。有关更多信息,请参见LDAP Authorization

在版本 3.0 中进行了更改:更改了 localhost 异常,以便这些连接(仅*)有权在admin数据库上创建第一个用户。在以前的版本中,使用 localhost 异常获得访问权限的连接对 MongoDB 实例的访问不受限制。

只有在 MongoDB 实例中没有创建用户时,localhostexception 才适用。

对于分片群集,localhost 异常适用于每个分片,也适用于整个群集。创建分片群集并通过mongos实例添加用户 Management 员后,您仍必须防止未经授权而访问各个分片。对集群中的每个分片执行以下步骤之一: