自管理部署中基于角色的访问控制
MongoDB 采用基于角色的访问控制 (RBAC) 来管理对 MongoDB 系统的访问。用户被授予一个或多个角色,这些角色决定了用户对数据库资源和操作的访问权限。在分配的角色之外,该用户无权访问系统。
启用访问控制
MongoDB 默认不启用访问控制。您可以使用 --auth
或security.authorization
设置启用授权。启用内部身份验证还会启用客户端授权。
启用访问控制后,用户必须验证自身。
角色
角色授予对 资源 执行指定 操作 的特权。每个权限要么在角色中显式指定,要么从另一个角色继承,或两者兼而有之。
访问权限
角色从不限制特权。如果用户有两个角色,则具有较高访问权限的角色优先。
例如,如果您将数据库的read
角色授予已具有readWriteAnyDatabase
角色的用户,则read
授予不会撤消对数据库的写入访问权限。
要撤销用户的角色,请使用 revokeRolesFromUser
命令。
authenticationRestrictions
角色可对用户施加身份验证限制,从而要求他们从指定的源和目标 IP 地址范围进行连接。
有关详细信息,请参阅身份验证限制。
特权
特权由指定的资源以及允许对该资源执行的操作组成。
资源是指数据库、集合、集合集或集群。如果资源是集群,则关联的动作会影响系统的状态,而不是特定的数据库或集合。有关资源文档的信息,请参阅有关自托管部署的资源文档。
操作指定允许对资源执行的操作。有关可用操作,请参阅适用于自管理部署的特权操作。
继承的特权
角色可以在其定义中包含一个或多个现有角色,在这种情况下,该角色将继承所包含角色的所有特权。
一个角色可以从其数据库中的其他角色继承特权。在 admin
数据库上创建的角色可以从任何数据库中的角色继承特权。
查看角色特权
可以通过发出 rolesInfo
命令并将 showPrivileges
和 showBuiltinRoles
字段均设置为 true
来查看角色的特权。
用户和角色
您可以在创建用户时为用户分配角色。您还可以更新现有用户,以授予或撤销角色。有关用户管理方法的完整列表,请参阅用户管理
分配有角色的用户将获得该角色的所有特权。一个用户可以有多个角色。通过在各种数据库中为用户分配角色,在一个数据库中创建的用户可以拥有在其他数据库中操作的权限。
注意
在数据库中创建的第一个用户应该是有特权管理其他用户的用户管理员。请参阅对自管理部署启用访问控制。
内置角色和用户定义的角色
MongoDB 具有内置角色,可提供数据库系统中常用的一系列权限。
如果这些内置角色无法提供所需的特权集,MongoDB 提供了创建和修改用户自定义角色的方法。
LDAP 授权
注意
从MongoDB 8.0开始, LDAP身份验证和授权已弃用。 LDAP可用并将在MongoDB 8的整个生命周期内继续运行而不进行更改。 LDAP将在未来的主要发布中删除。
有关详细信息,请参阅LDAP弃用。
MongoDB Enterprise 支持在 LDAP 服务器中查询经过身份验证的用户所属的 LDAP 组。MongoDB 可将每个返回群组的标识名 (DN) 映射到 admin
数据库中的角色。MongoDB 会根据映射的角色及其关联的权限对用户进行授权。有关更多信息,请参阅 LDAP 授权。