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