一、概述
MongoDB采用基于角色的访问控制(RBAC)来管理对 MongoDB系统。向用户授予一个或多个角色那 确定用户对数据库资源和操作的访问权限。外面 在角色分配中,用户无权访问系统。
1、启用访问控制
MongoDB默认情况下不启用访问控制。您可以使用--auth或security.authorization设置启用授权。启用内部身份验证还可以启用客户端授权。
一旦启用了访问控制,用户就必须对自己进行身份验证。
角色
角色授予对资源执行指定操作的权限。每个特权要么在角色中明确指定,要么从另一个角色继承,或者两者兼而有之。
访问
角色从不限制特权。若一个用户有两个角色,那个么具有较大访问权限的角色优先。
例如,如果将数据库上的读取角色授予已具有readWriteAnyDatabase角色的用户,则读取授予不会撤消对该数据库的写入访问权限。
要撤消用户的角色,请使用revokeRolesFromUser命令。
身份验证限制
角色可以对用户施加身份验证限制,要求他们从指定的源和目标IP地址范围进行连接。
有关详细信息,请参阅身份验证限制。
权限
权限由指定的资源和对该资源允许的操作组成。
资源是数据库、集合、集合集或集群。如果资源是集群,则附属操作会影响系统的状态,而不是特定的数据库或集合。有关资源文档的信息,请参见资源文档。
操作指定对资源允许的操作。有关可用操作,请参阅特权操作。
继承的权限
一个角色可以在其定义中包含一个或多个现有角色,在这种情况下,该角色将继承所包含角色的所有权限。
角色可以从其数据库中的其他角色继承特权。在管理数据库上创建的角色可以从任何数据库中的角色继承权限。
查看角色的权限
您可以通过在showPrivileges和showBuiltinRoles字段均设置为true的情况下发出rolesInfo命令来查看角色的权限。
用户和角色
您可以在创建用户期间为用户分配角色。您还可以更新现有用户以授予或撤销角色。有关用户管理方法的完整列表,请参阅用户管理
分配了角色的用户将获得该角色的所有权限。一个用户可以具有多个角色。通过分配给各种数据库中的用户角色,在一个数据库中创建的用户可以拥有对其他数据库执行操作的权限。
内置角色和用户定义的角色
MongoDB提供了内置的角色,这些角色提供了数据库系统中通常需要的一组权限。
如果这些内置角色无法提供所需的权限集,MongoDB将提供创建和修改用户定义角色的方法。
LDAP授权
MongoDB Enterprise支持在LDAP服务器上查询经过身份验证的用户所属的LDAP组。MongoDB将每个返回组的可分辨名称(DN)映射到管理数据库上的角色。MongoDB根据映射的角色及其相关特权对用户进行授权。有关详细信息,请参阅LDAP授权。
二、内置角色
MongoDB通过基于角色的授权授予对数据和命令的访问权限,并提供内置角色,提供数据库系统中通常需要的不同级别的访问权限。您还可以创建用户定义的角色。
角色授予对定义的资源执行一组操作的权限。给定的角色应用于在其上定义它的数据库,并且可以授予向下到粒度集合级别的访问权限。
MongoDB的每个内置角色都定义了在数据库级别访问角色数据库中的所有非系统集合,以及在集合级别访问所有系统集合。
MongoDB提供了内置的数据库用户和数据库管理每个数据库上的角色。MongoDB仅在管理数据库上提供所有其他内置角色。
本节介绍每个内置角色的权限。您还可以随时通过发出rolesInfo命令查看内置角色的权限,其中showPrivileges和showBuiltinRoles字段均设置为true。
1、数据库用户角色
每个数据库都包括以下客户端角色:
read
提供读取所有非系统集合和system.js集合上的数据的功能。
该角色通过授予以下操作来提供读取访问权限:
- changeStream
- collStats
- dbHash
- dbStats
- find
- killCursors
- listIndexes
- listCollections
如果用户没有listDatabases权限操作,则如果在authorizedDatabases选项未指定或设置为true的情况下运行该命令,则用户可以运行listDatabases命令以返回用户具有权限的数据库列表(包括用户在特定集合上具有特权的数据库)。
readWrite
提供读取角色的所有权限,以及修改所有非系统集合和system.js集合上的数据的能力。
该角色对这些集合提供以下操作:
- changeStream
- collStats
- convertToCapped
- createCollection
- dbHash
- dbStats
- dropCollection
- createIndex
- dropIndex
- find
- insert
- killCursors
- listIndexes
- listCollections
- remove
- renameCollectionSameDB
- update
2、数据库管理角色
每个数据库都包括以下数据库管理角色:
dbAdmin
提供执行管理任务的能力,例如与架构相关的任务、索引和收集统计信息。此角色不授予用户和角色管理权限。
具体而言,该角色提供以下特权:
dbOwner
数据库所有者可以对数据库执行任何管理操作。此角色结合了readWrite、dbAdmin和userAdmin角色授予的权限。
userAdmin
提供在当前数据库中创建和修改角色和用户的功能。由于userAdmin角色允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接地为超级用户提供对数据库的访问权限,或者如果作用域为admin数据库,则为集群提供访问权限。
userAdmin角色明确提供以下操作:
- changeCustomData
- changePassword
- createRole
- createUser
- dropRole
- dropUser
- grantRole
- revokeRole
- setAuthenticationRestriction
- viewRole
- viewUser
三、用户定义角色
四、管理用户和角色
五、更改密码和自定义数据
📢文章下方有交流学习区!一起学习进步!也可以前往官网,加入官方微信交流群💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗