简介
授权是用户管理和访问控制的重要组成部分,它定义了每个用户被允许在系统上执行哪些操作的策略。决定适当的策略并在数据库中实施这些策略,可以确保用户能够与他们所需的资源进行交互,同时防止不当行为。
在本指南中,我们将介绍 MongoDB 中的授权工作原理。我们将了解 MongoDB 如何概念化访问管理、可以授予用户哪些类型的权限以及如何将策略附加到用户帐户。
如果您正在使用 MongoDB,请查看 Prisma 的 MongoDB 连接器!您可以使用 Prisma Client 自信地管理生产环境中的 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的从零开始入门指南或如何添加到现有项目。
先决条件
要跟随本指南,您需要一个拥有适当权限的 MongoDB 服务器帐户。
要调整 MongoDB 的配置并启用数据库授权,您需要服务器的 root
级别访问权限。
此外,在 MongoDB 内部,您需要一个至少拥有 userAdmin
角色的帐户,以便可以设置基于角色的授权策略。包含 userAdmin
角色的角色,从最窄的焦点到最广泛的权限级别列出如下:
userAdmin
dbOwner
userAdminAnyDatabase
root
MongoDB 中的授权如何工作?
MongoDB 中的授权和权限管理是使用基于角色的访问控制(RBAC)实现的。在此系统中,不同级别的访问权限与单个角色相关联。要授予用户执行某个操作的权限,您可以授予他们拥有适当权限的角色的成员身份。
MongoDB 中的角色可以嵌套。这意味着角色可以授予其他角色。包含另一个角色的角色会继承子角色的所有权限。这使得通过适当组合角色来创建具有所需权限的新角色成为可能。
权限本身由操作和资源的组合定义。操作组件描述了权限允许的行为类型,而资源指示了操作的目标或范围。
MongoDB 中有哪些可用资源?
在 MongoDB 的访问控制模型中,操作的目标或范围被称为“资源”。每个操作只能应用于特定类型的资源。配置权限时,您需要指定该权限应该作用于的确切资源。
我们可以按从最窄焦点到最广焦点的顺序列出可用资源。
权限最窄的定义是将其作用于集群中特定数据库内的特定集合。在同一个数据库中,不同的集合可以指定不同的权限。这允许您为不同类型的数据实施精细策略。
您可以对其执行策略的下一个最大资源是数据库。在数据库级别管理权限允许您提供影响整个数据库及其所有集合的通用策略。
您还可以设置适用于所有数据库中同名集合的策略。这允许您使用命名约定来为整个系统中的特定集合实施访问控制。更广泛的版本是将策略应用于系统上的所有数据库和非系统集合。
最后,您可以对整个集群应用策略。针对集群的操作会影响通用系统,而不是直接管理的数据。集群级别的策略通常侧重于管理操作。
MongoDB 中有哪些可用操作?
MongoDB 中有大量的操作可用,这些操作与通用使用、数据库管理和系统管理有关。通常,操作对应于 MongoDB 中的一个或多个命令或方法。
要查看 MongoDB 中可用的操作及其功能列表,请展开以下部分:
操作 | 范围 | 描述 |
---|---|---|
find | 数据库或集合 | 允许对数据库执行读取操作 |
insert | 数据库或集合 | 允许对数据库执行写入操作 |
remove | 数据库或集合 | 允许对数据库执行删除操作 |
update | 数据库或集合 | 允许对数据库执行替换操作 |
bypassDocumentValidation | 数据库或集合 | 允许用户忽略文档的数据验证策略。 |
useUUID | 集群 | 允许用户使用 UUID 值查找文档 |
changeCustomData | 数据库 | 用户可以修改数据库中任何用户关联的自定义数据 |
changeOwnCustomData | 数据库 | 允许用户更改与其自身用户关联的自定义数据 |
changeOwnPassword | 数据库 | 允许用户更改自己的帐户密码 |
changePassword | 数据库 | 允许用户更改数据库中任何用户的密码 |
createCollection | 数据库或集合 | 允许用户在数据库中创建集合 |
createIndex | 数据库或集合 | 允许用户为数据库创建索引 |
createRole | 数据库 | 允许用户在数据库中创建自定义角色 |
createUser | 数据库 | 允许用户定义新用户帐户 |
dropCollection | 数据库或集合 | 允许用户删除集合 |
dropRole | 数据库 | 允许用户删除角色 |
dropUser | 数据库 | 允许用户删除用户 |
enableProfiler | 数据库 | 允许用户启用性能分析 |
grantRole | 数据库 | 允许用户将与数据库关联的角色授予系统上的任何用户 |
killCursors | 集合 | 在 MongoDB 4.2 之前的版本中,允许用户终止自己的游标 |
killAnyCursor | 集合 | 允许用户终止其他用户的游标 |
revokeRole | 数据库 | 允许用户从系统中的任何用户移除角色 |
setAuthenticationRestriction | 数据库 | 允许用户为用户和角色设置认证要求 |
unlock | 集群 | 允许用户减少集群上的写入锁数量 |
viewRole | 数据库 | 允许查看数据库中角色的详细信息 |
viewUser | 数据库 | 允许查看数据库中用户的详细信息 |
authSchemaUpgrade | 集群 | 允许用户在 MongoDB 版本之间升级认证机制 |
cleanupOrphaned | 集群 | 允许用户在 MongoDB 4.4 之前的版本中清理孤立文档 |
cpuProfiler | 集群 | 允许用户启用 CPU 分析 |
inprog | 集群 | 允许用户查看其他用户正在进行或排队的操作信息 |
invalidateUserCache | 集群 | 允许用户手动从缓存中刷新用户详细信息 |
killop | 集群 | 允许用户终止其他用户的操作 |
planCacheRead | 数据库或集合 | 允许用户查看有关缓存查询计划的信息 |
planCacheWrite | 数据库或集合 | 允许用户删除缓存的查询计划 |
storageDetails | 数据库或集合 | 已弃用 |
changeStream | 集合、数据库或集群 | 允许用户从非系统集合访问实时变更数据 |
appendOpLogNote | 集群 | 允许用户向操作日志添加备注 |
replSetConfigure | 集群 | 允许配置副本集 |
replSetGetConfig | 集群 | 允许用户查看当前副本集配置 |
replSetGetStatus | 集群 | 允许用户查找副本集的当前状态 |
replSetHeartbeat | 集群 | 已弃用 |
replSetStateChange | 集群 | 允许用户管理集群副本集的状态 |
resync | 集群 | 已弃用 |
addShard | 集群 | 允许用户向分片集群添加分片副本 |
clearJumboFlag | 数据库或集合 | 允许用户清理分片中超大块 |
enableSharding | 集群、数据库或集合 | 允许用户在集群和数据库上启用分片,或在集群级别管理分片 |
refineCollectionShardKey | 数据库或集合 | 允许用户向现有分片键添加额外字段 |
flushRouterConfig | 集群 | 允许用户将缓存的路由表标记为已过时 |
getShardVersion | 数据库 | 内部命令 |
listShards | 集群 | 允许用户查看集群的已配置分片列表 |
moveChunk | 数据库或集合 | 允许用户将数据块移动到新分片 |
removeShard | 集群 | 允许用户从分片中抽走数据块,然后从集群中移除该分片 |
shardingState | 集群 | 允许用户查看 MongoDB 服务器是否是分片集群的一部分 |
splitChunk | 数据库或集合 | 允许用户在分片中合并或拆分数据块 |
splitVector | 数据库或集合 | 内部命令 |
applicationMessage | 集群 | 允许用户向审计日志添加自定义消息 |
closeAllDatabases | 集群 | 已弃用 |
collMod | 数据库或集合 | 允许用户修改与集合关联的选项 |
compact | 数据库或集合 | 允许用户对集合中的数据和索引进行碎片整理 |
connPoolSync | 集群 | 内部命令 |
convertToCapped | 数据库或集合 | 允许用户将集合转换为具有固定最大大小的封顶集合 |
dropConnections | 集群 | 允许用户从 MongoDB 删除到指定主机的出站连接 |
dropDatabase | 数据库 | 允许用户删除当前数据库 |
dropIndex | 数据库或集合 | 允许用户删除索引 |
forceUUID | 集群 | 允许用户使用全局唯一 UUID 定义集合 |
fsync | 集群 | 允许用户将所有待写入刷新到存储并锁定集群以进行写入 |
getDefaultRWConcern | 集群 | 允许用户查看默认的读写一致性和隔离设置 |
getParameter | 集群 | 允许用户查询参数的值 |
hostInfo | 集群 | 允许用户查看运行 MongoDB 实例的服务器信息 |
logRotate | 集群 | 允许用户触发日志轮换 |
reIndex | 数据库或集合 | 允许用户重建集合的索引 |
renameCollectionSameDB | 数据库 | 允许用户重命名当前数据库中的集合 |
setDefaultRWConcern | 集群 | 允许用户指定默认的读写一致性和隔离设置 |
setParameter | 集群 | 允许用户定义参数的值 |
shutdown | 集群 | 允许用户关闭 MongoDB 实例 |
touch | 集群 | 已弃用 |
impersonate | 集群 | 允许用户终止与其他用户和角色关联的会话 |
listSessions | 集群 | 允许用户列出所有用户的所有会话 |
killAnySession | 集群 | 允许用户终止特定用户或模式的所有会话 |
checkFreeMonitoringStatus | 集群 | 允许用户查看云监控功能的当前状态 |
setFreeMonitoring | 集群 | 允许用户启用或禁用云监控功能 |
collStats | 数据库或集合 | 允许用户查看有关集合的统计信息 |
connPoolStats | 集群 | 允许用户查看 MongoDB 实例出站连接的状态 |
dbHash | 数据库或集合 | 允许用户查询数据库中集合的哈希值 |
dbStats | 数据库 | 允许用户查看存储统计信息 |
getCmdLineOpts | 集群 | 允许用户查看用于启动 MongoDB 实例的命令行选项 |
getLog | 集群 | 允许用户查看最新的 MongoDB 事件 |
listDatabases | 集群 | 允许用户查看所有数据库的列表 |
listCollections | 数据库 | 允许用户查看数据库中的集合和视图列表 |
listIndexes | 数据库或集合 | 允许用户查看与特定集合关联的索引 |
netstat | 集群 | 内部命令 |
serverStatus | 集群 | 允许用户查看数据库当前状态的信息 |
validate | 数据库或集合 | 允许用户检查集合数据和索引的正确性 |
top | 集群 | 允许用户查看集合的使用统计信息 |
MongoDB 默认有哪些可用角色?
MongoDB 包含许多有用的角色,它们将相似的权限组合在一起。这些角色允许您以简洁的方式授予和撤销对数据库资源的权限。
要查看 MongoDB 中可用的操作及其功能列表,请展开以下部分:
read
:提供对非系统集合的读取访问权限- 操作
changeStream
collStats
dbHash
dbStats
find
killCursors
listIndexes
listCollections
- 操作
readWrite
:提供对非系统集合的读写访问权限- 操作
collStats
convertToCapped
createCollection
dbHash
dbStats
dropCollection
createIndex
dropIndex
find
insert
killCursors
listIndexes
listCollections
remove
renameCollectionSameDB
update
- 操作
dbAdmin
:提供数据库级别的管理任务访问权限,不包括角色和用户管理system.profile
集合中的操作changeStream
collStats
convertToCapped
createCollection
dbHash
dbStats
dropCollection
find
killCursors
listCollections
listIndexes
planCacheRead
- 非系统集合中的操作
bypassDocumentValidation
collMod
collStats
compact
convertToCapped
createCollection
createIndex
dbStats
dropCollection
dropDatabase
dropIndex
enableProfiler
listCollections
listIndexes
planCacheIndexFilter
planCacheRead
planCacheWrite
reIndex
renameCollectionSameDB
storageDetails
validate
userAdmin
:提供创建和修改用户及角色的访问权限- 操作
changeCustomData
changePassword
createRole
createUser
dropRole
dropUser
grantRole
revokeRole
setAuthenticationRestriction
viewRole
viewUser
- 操作
dbOwner
:提供数据库的管理访问权限,包括角色和用户管理- 此角色继承的角色
readWrite
dbAdmin
userAdmin
- 此角色继承的角色
clusterMonitor
:提供对集群的只读访问权限- 整个集群的操作
checkFreeMonitoringStatus
connPoolStats
getCmdLineOpts
getDefaultRWConcern
getLog
getParameter
getShardMap
hostInfo
inprog
listDatabases
listSessions
listShards
netstat
replSetGetConfig
replSetGetStatus
serverStatus
setFreeMonitoring
shardingState
top
- 集群内所有数据库的操作
collStats
dbStats
getShardVersion
indexStats
useUUID
- 所有
system.profile
集合的操作find
config
数据库中非系统集合的操作collStats
dbHash
dbStats
find
getShardVersion
indexStats
killCursors
listCollections
listIndexes
planCacheRead
config
数据库中system.js
集合的操作collStats
dbHash
dbStats
find
killCursors
listCollections
listIndexes
planCacheRead
local
数据库中所有集合的操作collStats
dbHash
dbStats
find
getShardVersion
indexStats
killCursors
listCollections
listIndexes
planCacheRead
local
数据库中system.js
集合的操作collStats
dbHash
dbStats
find
killCursors
listCollections
listIndexes
planCacheRead
local
数据库中system.replset
和system.profile
集合的操作find
- 整个集群的操作
clusterManager
:通过config
和local
数据库提供对集群的监控和管理访问- 整个集群的操作
addShard
appendOplogNote
applicationMessage
cleanupOrphaned
flushRouterConfig
getDefaultRWConcern
listSessions
listShards
removeShard
replSetConfigure
replSetGetConfig
replSetGetStatus
replSetStateChange
resync
setDefaultRWConcern
setFeatureCompatibilityVersion
setFreeMonitoring
- 集群内所有数据库的操作
clearJumboFlag
enableSharding
refineCollectionShardKey
moveChunk
splitChunk
splitVector
config
数据库中非系统集合的操作collStats
dbHash
dbStats
enableSharding
find
insert
killCursors
listCollections
listIndexes
moveChunk
planCacheRead
remove
splitChunk
splitVector
update
config
数据库中system.js
集合的操作collStats
dbHash
dbStats
find
killCursors
listCollections
listIndexes
planCacheRead
local
数据库中所有非系统集合的操作enableSharding
insert
moveChunk
remove
splitChunk
splitVector
update
local
数据库中system.replset
集合的操作collStats
dbHash
dbStats
find
killCursors
listCollections
listIndexes
planCacheRead
- 整个集群的操作
hostManager
:提供监控和管理服务器的能力。- 整个集群的操作
applicationMessage
closeAllDatabases
connPoolSync
flushRouterConfig
fsync
invalidateUserCache
killAnyCursor
KillAnySession
killop
logRotate
resync
setParameter
shutdown
touch
unlock
- 整个集群的操作
clusterAdmin
:提供所有集群管理访问权限- 此角色继承的角色
clusterManager
clusterMonitor
hostManager
- 额外操作
dropDatabase
- 此角色继承的角色
backup
:提供备份数据所需的权限- 所有资源的操作
listDatabases
listCollections
listIndexes
- 整个集群的操作
appendOplogNote
getParameter
listDatabases
serverStatus
- 对非系统集合、
system.js
和system.profile
集合、admin.system.users
和admin.system.roles
集合以及config.settings
集合的操作find
- 对
config.settings
集合的操作insert
update
- 所有资源的操作
restore
:提供将数据恢复到集群的权限- 整个集群的操作
getParameter
- 对非系统集合的操作
bypassDocumentValidation
changeCustomData
changePassword
collMod
convertToCapped
createCollection
createIndex
createRole
createUser
dropCollection
dropRole
dropUser
grantRole
insert
revokeRole
viewRole
viewUser
- 对
system.js
集合的操作bypassDocumentValidation
collMod
createCollection
createIndex
dropCollection
insert
- 对任何资源的操作
listCollections
- 对
config
和local
数据库中非系统集合的操作bypassDocumentValidation
collMod
createCollection
createIndex
dropCollection
insert
- 对
admin.system.version
集合的操作bypassDocumentValidation
collMod
createCollection
createIndex
dropCollection
find
insert
- 对
admin.system.roles
集合的操作createIndex
- 对
admin.system.users
集合的操作bypassDocumentValidation
collMod
createCollection
createIndex
dropCollection
find
insert
remove
update
- 整个集群的操作
readAnyDatabase
:提供与read
相同的权限,适用于除local
和config
以外的所有数据库- 整个集群的额外操作
listDatabases
- 整个集群的额外操作
readWriteAnyDatabase
:提供与readWrite
相同的权限,适用于除local
和config
以外的所有数据库- 整个集群的额外操作
listDatabases
- 整个集群的额外操作
userAdminAnyDatabase
:提供与userAdmin
相同的权限,适用于除local
和config
以外的所有数据库。- 整个集群的额外操作
authSchemaUpgrade
invalidateUserCache
listDatabases
admin
数据库中system.users
和system.roles
集群的额外操作collStats
dbHash
dbStats
find
killCursors
planCacheRead
- 整个集群的额外操作
dbAdminAnyDatabase
:提供与dbAdmin
相同的权限,适用于除local
和config
以外的所有数据库。- 整个集群的额外操作
listDatabases
- 整个集群的额外操作
root
:提供对整个系统的完全访问权限。- 此角色继承的角色
readWriteAnyDatabase
dbAdminAnyDatabase
userAdminAnyDatabase
clusterAdmin
restore
backup
system
集合的额外操作validate
- 此角色继承的角色
如何在 MongoDB 中启用授权
在 MongoDB 使用授权来管理用户权限之前,您必须在服务器或集群上启用该功能。为此,您必须使用 root
或其他管理权限登录到服务器。
注意:在启用授权之前,请仔细检查以确保您至少拥有一个具有管理角色所需权限的角色。
以管理员身份打开 /etc/mongod.conf
文件,修改 MongoDB 服务器的配置。此命令将使用 EDITOR
环境变量中定义的文本编辑器打开文件,如果未定义则回退到 vi
,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
角色使用 sales
数据库上的 read
角色,您可以输入:
db.grantRolesToRole("salesMonitor",["read"])
从自定义角色撤销角色
如果您再次改变主意,可以使用 db.revokeRolesFromRole()
方法撤销角色访问权限,该方法使用相同的参数语法。
db.revokeRolesFromRole("salesMonitor",["read"])
替换自定义角色的值
要重新定义用户定义角色的特征,您可以使用 db.updateRole()
命令。它的工作方式是替换它指定的字段,而不是追加或截断它们。因此,在发出命令时要小心,以免意外覆盖重要信息。
db.updateRole()
命令的语法包括将角色名称作为第一个参数传递,将指定要替换的字段的文档作为第二个参数传递。可以替换的字段包括 privileges
数组、roles
数组和 authenticationRestrictions
数组。这些字段中至少一个必须包含在文档中。
例如,一旦我们最终决定 salesMonitor
角色使用 sales
数据库上的 read
角色,我们可能希望重新定义角色的权限和角色数组,以清理我们实验中留下的任何额外权限。您可以通过使用要设置的新信息更新角色来完成此操作。
db.updateRole("salesMonitor",{privileges: [],roles: [{role: "read",db: "sales"}]})
删除用户定义角色
您可以使用 db.dropRole()
方法删除不必要的角色。
要删除角色,只需将其名称传递给方法即可。
db.dropRole()
该角色将从系统中移除,通过该角色授予用户的任何权限将不再可访问。
结论
在本文中,我们深入探讨了 MongoDB 如何实现访问控制和权限管理。我们了解了系统的概念基础,查看了管理员可用的角色、操作和资源,然后学习了如何使用角色系统来配置整个系统的授权。
这些技能对于为用户提供完成所需任务所需的资源访问权限,同时限制对系统不相关部分的暴露至关重要。学习如何定义和利用角色将增强您在管理 MongoDB 系统时提供细粒度访问控制的能力。
如果您正在使用 MongoDB,请查看 Prisma 的 MongoDB 连接器!您可以使用 Prisma Client 自信地管理生产环境中的 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的从零开始入门指南或如何添加到现有项目。
常见问题解答
MongoDB 中有两个用于只读用户的内置角色。用户可以被分配到 read
角色或 readAnyDatabase
角色。
read
提供对所有非系统集合的读取数据能力。
readAnyDatabase
提供与 read
相同的功能,不同之处在于它还提供在整个集群上使用 listDatabases
操作的能力。
clusterMonitor
角色提供对监控工具的只读访问,例如 MongoDB Cloud Manager 和 Ops Manager 监控代理。
backup
角色提供备份数据所需的最小权限。此角色提供足够的权限来使用 MongoDB Cloud 和 Ops Manager 备份代理。
它还拥有在 admin
、settings
和 config
数据库的备份集合上运行 insert
和 update
操作的权限。
MongoDB 中的 root
角色提供对以下角色组合的所有操作和资源的访问权限:
readWriteAnyDatabase
dbAdminAnyDatabase
userAdminAnyDatabase
clusterAdmin
restore
backup
MongoDB 采用 RBAC 来管理对 MongoDB 系统的访问。RBAC 是一种安全策略,它根据用户分配的角色来限制允许用户执行的操作。
如果用户没有被分配角色,MongoDB 不允许对数据库进行操作或访问。