简介
授权是用户管理和访问控制中必不可少的组成部分,它定义了每个用户在系统上可以执行哪些操作的策略。确定哪些策略是合适的,并在你的数据库中实施这些策略,可以确保用户可以与他们需要的资源进行交互,同时防止不当行为。
在本指南中,我们将介绍授权在 MongoDB 中的工作原理。我们将介绍 MongoDB 如何概念化访问管理,哪些类型的权限可以授予用户,以及如何将策略附加到用户帐户。
如果你正在使用 MongoDB,请查看 Prisma 的 MongoDB 连接器!你可以使用 Prisma 客户端 放心地管理生产 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的 从头开始指南,或了解如何 添加到现有项目。
先决条件
要遵循本指南,你需要在具有适当权限的 MongoDB 服务器上拥有一个帐户。
要调整 MongoDB 的配置并在数据库上启用授权,你需要在服务器上拥有 root
级别的访问权限。
此外,在 MongoDB 中,你需要一个至少具有 userAdmin
角色的帐户,以便可以设置基于角色的授权策略。包含 userAdmin
角色的角色(从最窄的关注范围到最广泛的权限范围排列)是
userAdmin
dbOwner
userAdminAnyDatabase
root
MongoDB 中的授权机制如何运作?
MongoDB 中的授权和权限管理是使用 基于角色的访问控制 (RBAC) 实现的。在这个系统中,不同的访问级别与单个角色相关联。要授予用户执行操作的权限,你需要授予他们具有适当权限的角色成员资格。
MongoDB 中的角色可以嵌套。这意味着角色可以授予其他角色。包含另一个角色的角色继承了所有子角色的权限。这使得可以通过适当地组合角色来创建具有所需权限的新角色。
权限本身由操作和资源的组合定义。操作部分描述了权限允许的行为类型,而资源指示操作的目标或范围。
MongoDB 中有哪些资源可用?
操作的目标或范围在 MongoDB 的访问控制模型中被称为资源。每个操作只能应用于特定类型的资源。在配置权限时,你需要指定权限应该适用的确切资源。
我们可以从最窄的关注范围到最广泛的关注范围,逐一介绍可用的资源。
权限可以通过将其范围限定到特定集群中特定数据库内的特定 集合 来最严格地定义。在同一个数据库中,不同的集合可以指定不同的权限。这允许你为不同类型的数据实施细粒度的策略。
你可以实施策略的下一个最大的资源是 数据库。在数据库级别管理权限允许你提供影响整个数据库及其所有集合的一般策略。
你还可以设置适用于所有数据库中同名集合的策略。这允许你使用命名约定在整个系统中实施特定集合的访问控制。更广泛的版本是将策略应用于系统上的所有数据库和非系统集合。
最后,你可以针对整个 集群 应用策略。针对集群的操作会影响一般系统,而不是它直接管理的数据。集群级别的策略倾向于关注管理操作。
MongoDB 中有哪些操作可用?
MongoDB 中有许多操作与一般使用、数据库管理和系统管理相关。一般来说,操作对应于 MongoDB 中的一个或多个命令或方法。
要查看 MongoDB 中可用的操作列表及其功能,请展开下面的部分。
操作 | 范围 | 描述 |
---|---|---|
find | 数据库或集合 | 允许对数据库进行读取操作 |
插入 | 数据库或集合 | 允许对数据库进行写入操作 |
删除 | 数据库或集合 | 允许对数据库进行删除操作 |
更新 | 数据库或集合 | 允许对数据库进行替换操作 |
绕过文档验证 | 数据库或集合 | 允许用户忽略文档的数据验证策略。 |
使用UUID | 集群 | 允许用户使用 UUID 值来查找文档 |
更改自定义数据 | 数据库 | 用户可以修改与数据库中任何用户相关的自定义数据 |
更改自己的自定义数据 | 数据库 | 允许用户更改与自己用户相关的自定义数据 |
更改自己的密码 | 数据库 | 允许用户更改自己的帐户密码 |
更改密码 | 数据库 | 允许用户更改数据库中任何用户的密码 |
创建集合 | 数据库或集合 | 允许用户在数据库中创建集合 |
创建索引 | 数据库或集合 | 允许用户为数据库创建索引 |
创建角色 | 数据库 | 允许用户在数据库中创建自定义角色 |
创建用户 | 数据库 | 允许用户定义新的用户帐户 |
删除集合 | 数据库或集合 | 允许用户删除集合 |
删除角色 | 数据库 | 允许用户删除角色 |
删除用户 | 数据库 | 允许用户删除用户 |
启用性能分析 | 数据库 | 允许用户启用性能分析 |
授予角色 | 数据库 | 允许用户将与数据库关联的角色授予系统上的任何用户 |
终止游标 | 集合 | 允许用户在 4.2 之前的 MongoDB 版本中终止自己的游标 |
终止任何游标 | 集合 | 允许用户终止其他用户的游标 |
撤销角色 | 数据库 | 允许用户从系统中的任何用户那里删除角色 |
设置身份验证限制 | 数据库 | 允许用户为用户和角色设置身份验证要求 |
解锁 | 集群 | 允许用户减少集群上的写锁数量 |
查看角色 | 数据库 | 允许查看数据库中有关角色的详细信息 |
查看用户 | 数据库 | 允许查看数据库中有关用户的详细信息 |
身份验证模式升级 | 集群 | 允许用户在 MongoDB 版本之间升级身份验证机制 |
清理孤立文档 | 集群 | 允许用户清理 4.4 之前的 MongoDB 版本中的孤立文档 |
CPU 分析器 | 集群 | 允许用户启用 CPU 分析 |
正在进行 | 集群 | 允许用户查看其他用户正在进行或排队操作的信息 |
使缓存失效 | 集群 | 允许用户手动从缓存中刷新用户详细信息 |
终止操作 | 集群 | 允许用户终止其他用户的操作 |
计划缓存读取 | 数据库或集合 | 允许用户查看有关缓存的查询计划的信息 |
计划缓存写入 | 数据库或集合 | 允许用户删除缓存的查询计划 |
存储详细信息 | 数据库或集合 | 已弃用 |
更改流 | 集合、数据库或集群 | 允许用户从非系统集合中访问实时更改数据 |
追加操作日志备注 | 集群 | 允许用户向操作日志添加备注 |
复制集配置 | 集群 | 允许配置复制集 |
复制集获取配置 | 集群 | 允许用户查看当前复制集配置 |
复制集获取状态 | 集群 | 允许用户查找复制集的当前状态 |
复制集心跳 | 集群 | 已弃用 |
复制集状态更改 | 集群 | 允许用户管理集群复制集的状态 |
重新同步 | 集群 | 已弃用 |
添加分片 | 集群 | 允许用户将分片复制添加到分片集群 |
清除超大块标志 | 数据库或集合 | 允许用户清理分片中的超大块 |
启用分片 | 集群、数据库或集合 | 允许用户在集群和数据库上启用分片,或在集群级别管理分片 |
优化集合分片键 | 数据库或集合 | 允许用户向现有分片键添加其他字段 |
刷新路由器配置 | 集群 | 允许用户将缓存的路由表标记为已过时 |
获取分片版本 | 数据库 | 内部命令 |
列出分片 | 集群 | 允许用户查看集群的已配置分片列表 |
移动块 | 数据库或集合 | 允许用户将块移动到新的分片 |
移除分片 | 集群 | 允许用户从分片中清空块,然后从集群中移除分片 |
分片状态 | 集群 | 允许用户查看 MongoDB 服务器是否属于分片集群的一部分 |
拆分块 | 数据库或集合 | 允许用户合并或拆分分片中的块 |
拆分向量 | 数据库或集合 | 内部命令 |
应用程序消息 | 集群 | 允许用户向审核日志添加自定义消息 |
关闭所有数据库 | 集群 | 已弃用 |
修改集合 | 数据库或集合 | 允许用户修改与集合关联的选项 |
压缩 | 数据库或集合 | 允许用户对集合中的数据和索引进行碎片整理 |
连接池同步 | 集群 | 内部命令 |
转换为封顶 | 数据库或集合 | 允许用户将集合转换为具有设定的最大大小的封顶集合 |
删除连接 | 集群 | 允许用户从 MongoDB 到指定主机的连接中删除传出连接 |
删除数据库 | 数据库 | 允许用户删除当前数据库 |
删除索引 | 数据库或集合 | 允许用户删除索引 |
强制UUID | 集群 | 允许用户使用全局唯一的 UUID 定义集合 |
强制同步 | 集群 | 允许用户将所有挂起的写入刷新到存储并锁定集群以进行写入 |
获取默认读写关注点 | 集群 | 允许用户查看默认的读写一致性和隔离设置 |
获取参数 | 集群 | 允许用户查询参数的值 |
主机信息 | 集群 | 允许用户查看运行 MongoDB 实例的服务器的信息 |
日志轮转 | 集群 | 允许用户触发日志轮转 |
重新索引 | 数据库或集合 | 允许用户重建集合的索引 |
重命名同一数据库中的集合 | 数据库 | 允许用户重命名当前数据库中的集合 |
设置默认读写关注点 | 集群 | 允许用户指定默认的读写一致性和隔离设置 |
设置参数 | 集群 | 允许用户定义参数的值 |
关闭 | 集群 | 允许用户关闭 MongoDB 实例 |
触摸 | 集群 | 已弃用 |
模拟 | 集群 | 允许用户终止与其他用户和角色关联的会话 |
列出会话 | 集群 | 允许用户列出所有用户的会话 |
终止任何会话 | 集群 | 允许用户终止特定用户或模式的所有会话 |
检查免费监控状态 | 集群 | 允许用户查看云监控功能的状态 |
设置免费监控 | 集群 | 允许用户启用或禁用云监控功能 |
集合统计 | 数据库或集合 | 允许用户查看有关集合的统计信息 |
连接池统计 | 集群 | 允许用户查看 MongoDB 实例传出连接的状态 |
数据库哈希 | 数据库或集合 | 允许用户查询数据库中集合的哈希值 |
数据库统计 | 数据库 | 允许用户查看存储统计信息 |
获取命令行选项 | 集群 | 允许用户查看用于启动 MongoDB 实例的命令行选项 |
获取日志 | 集群 | 允许用户查看最新的 MongoDB 事件 |
列出数据库 | 集群 | 允许用户查看所有数据库的列表 |
列出集合 | 数据库 | 允许用户查看数据库中集合和视图的列表 |
列出索引 | 数据库或集合 | 允许用户查看与特定集合关联的索引 |
网络统计 | 集群 | 内部命令 |
服务器状态 | 集群 | 允许用户查看有关数据库当前状态的信息 |
验证 | 数据库或集合 | 允许用户检查集合数据和索引的正确性 |
顶部 | 集群 | 允许用户查看集合的使用统计信息 |
MongoDB 默认提供哪些角色?
MongoDB 包含许多有用的角色,它们将类似的权限组合在一起。这些角色允许您以简洁的方式授予和撤销对数据库资源的权限。
要查看 MongoDB 中可用的操作列表及其功能,请展开下面的部分。
read
: 提供对非系统集合的读取访问权限- 操作
更改流
集合统计
数据库哈希
数据库统计
find
终止游标
列出索引
列出集合
- 操作
readWrite
: 提供对非系统集合的读写访问权限- 操作
集合统计
转换为封顶
创建集合
数据库哈希
数据库统计
删除集合
创建索引
删除索引
find
插入
终止游标
列出索引
列出集合
删除
重命名同一数据库中的集合
更新
- 操作
dbAdmin
: 提供对数据库级别的管理任务的访问权限,不包括角色和用户管理- 在
system.profile
集合中的操作更改流
集合统计
转换为封顶
创建集合
数据库哈希
数据库统计
删除集合
find
终止游标
列出集合
列出索引
计划缓存读取
- 在非系统集合中的操作
绕过文档验证
修改集合
集合统计
压缩
转换为封顶
创建集合
创建索引
数据库统计
删除集合
删除数据库
删除索引
启用性能分析
列出集合
列出索引
计划缓存索引过滤器
计划缓存读取
计划缓存写入
重新索引
重命名同一数据库中的集合
存储详细信息
验证
- 在
userAdmin
: 提供创建和修改用户和角色的访问权限- 操作
更改自定义数据
更改密码
创建角色
创建用户
删除角色
删除用户
授予角色
撤销角色
设置身份验证限制
查看角色
查看用户
- 操作
dbOwner
: 提供对数据库的管理访问权限,包括角色和用户管理- 此角色继承的角色
readWrite
dbAdmin
userAdmin
- 此角色继承的角色
clusterMonitor
: 提供对集群的读取访问权限- 针对整个集群的操作
检查免费监控状态
连接池统计
获取命令行选项
获取默认读写关注点
获取日志
获取参数
获取分片映射
主机信息
正在进行
列出数据库
列出会话
列出分片
网络统计
复制集获取配置
复制集获取状态
服务器状态
设置免费监控
分片状态
顶部
- 针对集群中所有数据库的操作
集合统计
数据库统计
获取分片版本
索引统计
使用UUID
- 针对所有
system.profile
集合的操作find
- 针对
config
数据库中非系统集合的操作集合统计
数据库哈希
数据库统计
find
获取分片版本
索引统计
终止游标
列出集合
列出索引
计划缓存读取
- 针对
config
数据库中system.js
集合的操作集合统计
数据库哈希
数据库统计
find
终止游标
列出集合
列出索引
计划缓存读取
- 针对
local
数据库中所有集合的操作集合统计
数据库哈希
数据库统计
find
获取分片版本
索引统计
终止游标
列出集合
列出索引
计划缓存读取
- 针对
local
数据库中system.js
集合的操作集合统计
数据库哈希
数据库统计
find
终止游标
列出集合
列出索引
计划缓存读取
- 针对
local
数据库中system.replset
和system.profile
集合的操作find
- 针对整个集群的操作
clusterManager
: 通过config
和local
数据库提供对集群的监控和管理访问权限- 针对整个集群的操作
添加分片
追加操作日志备注
应用程序消息
清理孤立文档
刷新路由器配置
获取默认读写关注点
列出会话
列出分片
移除分片
复制集配置
复制集获取配置
复制集获取状态
复制集状态更改
重新同步
设置默认读写关注点
设置功能兼容性版本
设置免费监控
- 针对集群中所有数据库的操作
清除超大块标志
启用分片
优化集合分片键
移动块
拆分块
拆分向量
- 针对
config
数据库中非系统集合的操作集合统计
数据库哈希
数据库统计
启用分片
find
插入
终止游标
列出集合
列出索引
移动块
计划缓存读取
删除
拆分块
拆分向量
更新
- 针对
config
数据库中system.js
集合的操作集合统计
数据库哈希
数据库统计
find
终止游标
列出集合
列出索引
计划缓存读取
- 针对
local
数据库中所有非系统集合的操作启用分片
插入
移动块
删除
拆分块
拆分向量
更新
- 针对
local
数据库中system.replset
集合的操作集合统计
数据库哈希
数据库统计
find
终止游标
列出集合
列出索引
计划缓存读取
- 针对整个集群的操作
hostManager
: 提供监控和管理服务器的能力。- 针对整个集群的操作
应用程序消息
关闭所有数据库
连接池同步
刷新路由器配置
强制同步
使缓存失效
终止任何游标
终止任何会话
终止操作
日志轮转
重新同步
设置参数
关闭
触摸
解锁
- 针对整个集群的操作
clusterAdmin
: 提供所有集群管理访问权限- 此角色继承的角色
clusterManager
clusterMonitor
hostManager
- 其他操作
删除数据库
- 此角色继承的角色
backup
: 提供备份数据的必要权限- 针对所有资源的操作
列出数据库
列出集合
列出索引
- 针对整个集群的操作
追加操作日志备注
获取参数
列出数据库
服务器状态
- 针对非系统集合、
system.js
和system.profile
集合、admin.system.users
和admin.system.roles
集合以及config.settings
集合的操作find
- 针对
config.settings
集合的操作插入
更新
- 针对所有资源的操作
restore
: 提供将数据还原到集群的权限- 针对整个集群的操作
获取参数
- 针对非系统集合的操作
绕过文档验证
更改自定义数据
更改密码
修改集合
转换为封顶
创建集合
创建索引
创建角色
创建用户
删除集合
删除角色
删除用户
授予角色
插入
撤销角色
查看角色
查看用户
- 针对
system.js
集合的操作绕过文档验证
修改集合
创建集合
创建索引
删除集合
插入
- 针对任何资源的操作
列出集合
- 针对
config
和local
数据库中非系统集合的操作绕过文档验证
修改集合
创建集合
创建索引
删除集合
插入
- 针对
admin.system.version
集合的操作绕过文档验证
修改集合
创建集合
创建索引
删除集合
find
插入
- 针对
admin.system.roles
集合的操作创建索引
- 针对
admin.system.users
集合的操作绕过文档验证
修改集合
创建集合
创建索引
删除集合
find
插入
删除
更新
- 针对整个集群的操作
readAnyDatabase
: 除了local
和config
数据库外,提供与read
相同的权限,适用于所有数据库。- 对整个集群的额外操作
列出数据库
- 对整个集群的额外操作
readWriteAnyDatabase
: 除了local
和config
数据库外,提供与readWrite
相同的权限,适用于所有数据库。- 对整个集群的额外操作
列出数据库
- 对整个集群的额外操作
userAdminAnyDatabase
: 除了local
和config
数据库外,提供与userAdmin
相同的权限,适用于所有数据库。- 对整个集群的额外操作
身份验证模式升级
使缓存失效
列出数据库
- 对
admin
数据库中的system.users
和system.roles
集群的额外操作集合统计
数据库哈希
数据库统计
find
终止游标
计划缓存读取
- 对整个集群的额外操作
dbAdminAnyDatabase
: 除了local
和config
数据库外,提供与dbAdmin
相同的权限,适用于所有数据库。- 对整个集群的额外操作
列出数据库
- 对整个集群的额外操作
root
: 提供对整个系统的完全访问权限。- 此角色继承的角色
readWriteAnyDatabase
dbAdminAnyDatabase
userAdminAnyDatabase
clusterAdmin
restore
backup
- 对
system
集合的额外操作验证
- 此角色继承的角色
如何在 MongoDB 中启用授权
在 MongoDB 可以使用授权管理用户权限之前,您必须在服务器或集群上启用此功能。为此,您必须使用 root
或其他管理员权限登录到服务器。
注意:在启用授权之前,请仔细检查确保您至少拥有一个角色,该角色具有管理角色所需的权限。
通过使用文本编辑器以管理员身份打开 /etc/mongod.conf
文件来修改 MongoDB 服务器的配置。此命令将使用 EDITOR
环境变量中定义的文本编辑器打开文件,并回退到 vi
,它在几乎所有系统上都可用。
sudo ${EDITOR:-vi} /etc/mongod.conf
MongoDB 配置文件使用 YAML 序列化格式 来定义配置。取消注释或在文件中添加一个 security:
节点键。在该键下方,使用空格缩进一行(YAML 中不允许使用制表符),并将 authorization
设置为 enabled
. . .security:authorization: enabled. . .
完成后,保存并关闭文件。
要启用新的设置,请重新启动 MongoDB 服务器进程。如果您的 MongoDB 服务器在 Linux 主机上运行,操作将如下所示
sudo systemctl restart mongod.service
进程重新启动后,MongoDB 的授权框架应该在数据库中启用。
查看权限和角色
在开始将角色分配给用户之前,最好先了解如何在系统中查看有关权限和角色的信息。
要查看系统上所有可用的角色,包括所有内置角色及其关联的权限,请使用 db.getRoles()
方法,并将 showPrivileges
和 showBuiltinRoles
选项设置为 true
db.getRoles({rolesInfo: 1,showPrivileges: true,showBuiltinRoles: true})
返回的列表将包含有关每个角色及其在系统中各种资源上的权限的完整嵌套信息列表。
要获取有关特定角色的信息,请改用 db.getRole()
方法。您必须在执行命令之前位于用户定义所在的数据库中。
use admindb.getRole("root",{showPrivileges: true,showBuiltinRoles: true})
要检查已授予每个用户的角色,请切换到您感兴趣的数据库并使用 db.getUsers()
方法
use admindb.getUsers()
要检查与特定用户关联的角色,请改用 db.getUser()
use admindb.getUser("root")
分配和撤销用户的角色
要授予用户更多权限,您必须授予他们访问现有角色的权限。
db.grantRolesToUser()
方法允许您指定要添加到用户的额外角色。它的第一个参数是要授予额外权限的用户,第二个参数是要添加的额外角色数组。
db.grantRolesToUser("sally",["read","backup"])
如果角色在当前数据库中定义,您可以使用上面的简写方法,该方法通过名称指定角色,而不提及数据库。
要授予与其他数据库关联的角色,或更明确地指定角色,请使用文档指定 role
和 db
,而不是数据库名。
db.grantRolesToUser("sally",[{ role: "read", db: "sales"},{ role: "readWrite", db: "callLogs"}])
要撤销用户的角色,您可以使用名为 db.revokeRolesFromUser()
的配套方法。参数语法完全相同,但这次,命令将从指定的帐户中删除角色。
要删除在当前数据库中定义的角色,您可以使用角色名称,而不提及数据库。
db.revokeRolesFromUser("sally",["read","backup"])
要指定与其他数据库关联的角色,请使用长格式,在文档中指定 role
和 db
。
db.revokeRolesFromUser("sally",[{ role: "read", db: "sales"},{ role: "readWrite", db: "callLogs"}])
创建和管理自定义角色
有时系统内置的角色无法完全满足您需要分配的权限类型。在这种情况下,您可以创建自己的自定义角色。
创建新角色
db.createRole()
方法允许您定义一个新的角色,您可以为其分配权限和其他角色。然后,您可以将新角色授予用户,以赋予他们您定义的特定权限。
db.createRole()
方法的基本语法涉及传递一个文档,该文档定义角色的特征。文档可以包含以下字段
role
: 要赋予角色的名称privileges
: 包含要分配给角色的一组松散权限的数组。每个权限都定义在一个嵌套文档中,该文档定义一个resource
文档(指定此权限适用的资源)以及正在授予的actions
数组。roles
: 此角色应继承的其他角色的数组。新角色将获得授予此处列出的任何角色的所有权限。authenticationRestrictions
: 指定角色身份验证的任何限制的数组。这允许您拒绝角色的权限,如果用户没有以角色批准的方式进行身份验证。
前三个字段对于创建的每个新角色都是必需的。
例如,让我们创建一个名为 salesMonitor
的角色,它提供对 sales
数据库的只读访问权限。
db.createRole({role: "salesMonitor",privileges: [],roles: [{role: "read",db: "sales"}],})
我们可以使用 privileges
字段而不是 read
角色来表达一个类似(但更有限)的角色,方法是键入以下内容
db.createRole({role: "salesMonitor",privileges: [{resource: { db: "sales", collection: "" },actions: [ "find" ]}],roles: []})
查看有关自定义角色的信息
与以前一样,您可以使用 db.getRole()
方法获取有关角色的信息。
db.getRole("salesMonitor",{showPrivileges: true})
授予自定义角色更多权限
要授予现有用户定义的角色更多权限,您可以使用 db.grantPrivilegesToRole()
方法。它接受一个权限数组,这些权限由包含 resource
文档和 actions
数组的文档定义,就像我们在上面使用 db.createRole()
时看到的那样。
例如,要将 listCollections
权限添加到 salesMonitor
角色,您可以键入以下内容
db.grantPrivilegesToRole("salesMonitor",[{resource: { db: "sales", collection: "" },actions: [ "listCollections" ]}])
撤销自定义角色的权限
如果您改变主意,您可以使用 db.revokePrivilegesFromRole()
方法使用相同的格式删除 listCollections
操作。
db.revokePrivilegesFromRole("salesMonitor",[{resource: { db: "sales", collection: "" },actions: [ "listCollections" ]}])
授予自定义角色的角色
要将角色定义的权限添加到另一个角色,您可以使用 db.grantRolesToRole()
方法。该方法接受要修改的角色以及要添加到该角色的角色数组作为参数。
如果您最终还是想对 salesMonitor
角色使用 read
角色,您可以通过键入以下内容来实现。
db.grantRolesToRole("salesMonitor",["read"])
撤销自定义角色的权限
如果您再次改变主意,可以使用 db.revokeRolesFromRole()
方法撤销角色访问权限,该方法使用相同的参数语法。
db.revokeRolesFromRole("salesMonitor",["read"])
替换自定义角色的值
要重新定义用户定义角色的特征,可以使用 db.updateRole()
命令。它通过*替换*它指定的字段来工作,而不是*追加*或*截断*它们。因此,在发出命令时要小心,以免意外覆盖重要信息。
db.updateRole()
命令的语法涉及将角色名称作为第一个参数传递,并将指定要替换的字段的文档作为第二个参数传递。可以替换的字段包括 privileges
数组、roles
数组和 authenticationRestrictions
数组。文档中必须包含至少一个这些字段。
例如,当我们最终确定要使用 sales
数据库上的 read
角色来定义 salesMonitor
角色时,我们可能希望重新定义该角色的权限和角色数组,以清理我们实验中遗留的任何额外权限。您可以通过使用要设置的新信息更新角色来做到这一点。
db.updateRole("salesMonitor",{privileges: [],roles: [{role: "read",db: "sales"}]})
删除用户定义的角色
您可以使用 db.dropRole()
方法删除不必要的角色。
要删除角色,只需将角色名称传递给方法即可。
db.dropRole()
该角色将从系统中删除,并且该角色授予用户的任何权限将不再可访问。
结论
在本文中,我们介绍了 MongoDB 如何实现访问控制和权限管理的很多方面。我们了解了该系统的概念基础,看到了管理员可用于管理的角色、操作和资源,然后了解了如何使用角色系统来配置整个系统的授权。
这些技能对于为用户提供完成其所需任务所需的资源访问权限,同时限制对系统无关部分的访问是必要的。了解如何定义和利用角色可以提高您对管理的 MongoDB 系统提供细粒度访问控制的能力。
如果你正在使用 MongoDB,请查看 Prisma 的 MongoDB 连接器!你可以使用 Prisma 客户端 放心地管理生产 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的 从头开始指南,或了解如何 添加到现有项目。
常见问题解答
MongoDB 中有两个内置角色用于只读用户。用户可以被分配到 read
角色或 readAnyDatabase
角色。
read
允许读取所有非系统集合中的数据。
readAnyDatabase
提供与 read
相同的功能,但它还允许在整个集群中使用 listDatabases
操作。
clusterMonitor
角色提供对监控工具(如 MongoDB 云管理器和 Ops Manager 监控代理)的只读访问权限。
backup
角色提供备份数据所需的最小权限。此角色提供足够的权限来使用 MongoDB 云和 Ops Manager 备份代理。
它还具有对 admin
、settings
和 config
数据库中的备份集合运行 insert
和 update
操作的权限。
MongoDB 中的 root
角色提供对以下所有角色的操作和资源的访问权限。
readWriteAnyDatabase
dbAdminAnyDatabase
userAdminAnyDatabase
clusterAdmin
restore
backup
MongoDB 使用 RBAC 来控制对 MongoDB 系统的访问。RBAC 是一种安全策略,它根据用户分配的角色限制允许用户执行的操作。
如果用户没有分配的角色,MongoDB 不允许操作或访问数据库。