分享到

简介

授权是用户管理和访问控制的重要组成部分,它定义了每个用户在系统上被允许执行的操作策略。确定适当的策略并在数据库中实施这些策略,可确保用户可以与其需要的资源进行交互,同时防止不当行为。

在本指南中,我们将介绍授权在 MongoDB 中的工作方式。我们将了解 MongoDB 如何概念化访问管理,可以授予用户哪些类型的权限,以及如何将策略附加到用户帐户。

先决条件

要继续学习本指南,您需要在 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集合允许用户在 4.2 之前的 MongoDB 版本中终止其自己的游标
killAnyCursor集合允许用户终止其他用户的游标
revokeRole数据库允许用户从系统中的任何用户删除角色
setAuthenticationRestriction数据库允许用户为用户和角色设置身份验证要求
unlock集群允许用户减少集群上的写入锁数量
viewRole数据库允许查看数据库中角色的详细信息
viewUser数据库允许查看数据库中用户的详细信息
authSchemaUpgrade集群允许用户升级 MongoDB 版本之间的身份验证机制
cleanupOrphaned集群允许用户在 4.4 之前的 MongoDB 版本中清理孤立文档
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.replsetsystem.profile 集合的操作
      • find
  • clusterManager:通过 configlocal 数据库提供对集群的监控和管理访问权限
    • 整个集群的操作
      • 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.jssystem.profile 集合、admin.system.usersadmin.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
    • configlocal 数据库中非系统集合的操作
      • 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 相同的权限,适用于除 localconfig 之外的所有数据库
    • 整个集群的其他操作
      • listDatabases
  • readWriteAnyDatabase:提供与 readWrite 相同的权限,适用于除 localconfig 之外的所有数据库
    • 整个集群的其他操作
      • listDatabases
  • userAdminAnyDatabase:提供与 userAdmin 相同的权限,适用于除 localconfig 之外的所有数据库。
    • 整个集群的其他操作
      • authSchemaUpgrade
      • invalidateUserCache
      • listDatabases
    • admin 数据库中 system.userssystem.roles 集群的其他操作
      • collStats
      • dbHash
      • dbStats
      • find
      • killCursors
      • planCacheRead
  • dbAdminAnyDatabase:提供与 dbAdmin 相同的权限,适用于除 localconfig 之外的所有数据库。
    • 整个集群的其他操作
      • listDatabases
  • root:提供对整个系统的完全访问权限。
    • 此角色继承的角色
      • readWriteAnyDatabase
      • dbAdminAnyDatabase
      • userAdminAnyDatabase
      • clusterAdmin
      • restore
      • backup
    • system 集合的其他操作
      • validate

如何在 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() 方法,并将 showPrivilegesshowBuiltinRoles 选项设置为 true

db.getRoles({
rolesInfo: 1,
showPrivileges: true,
showBuiltinRoles: true
})

返回的列表将包含有关每个角色及其在整个系统中各种资源上拥有的权限的完整嵌套信息列表。

要获取有关特定角色的信息,请改用 db.getRole() 方法。您必须在定义用户的数据库上才能执行该命令

use admin
db.getRole(
"root",
{
showPrivileges: true,
showBuiltinRoles: true
}
)

要检查已授予每个用户的角色,请切换到您感兴趣的数据库并使用 db.getUsers() 方法

use admin
db.getUsers()

要检查与特定用户关联的角色,请改用 db.getUser()

use admin
db.getUser("root")

为用户分配和撤销角色

要向用户授予其他权限,您必须授予他们对现有角色的访问权限。

db.grantRolesToUser() 方法允许您指定要添加到用户的其他角色。它的第一个参数是您希望授予其他权限的用户,第二个参数是您希望添加的其他角色的数组

db.grantRolesToUser(
"sally",
[
"read",
"backup"
]
)

如果角色在当前数据库中定义,则可以使用上面的简写形式,该形式通过名称指定角色,而无需提及数据库。

要授予与不同数据库关联的角色,或者为了更明确,请将角色指定为定义 roledb 的文档

db.grantRolesToUser(
"sally",
[
{ role: "read", db: "sales"},
{ role: "readWrite", db: "callLogs"}
]
)

要从用户撤销角色,您可以使用名为 db.revokeRolesFromUser() 的配套方法。参数语法完全相同,但这次,该命令会从指定的帐户中删除角色。

要删除在当前数据库中定义的角色,您可以使用角色名称,而无需提及数据库

db.revokeRolesFromUser(
"sally",
[
"read",
"backup"
]
)

要指定与其他数据库关联的角色,请使用长格式,方法是在文档中指定 roledb

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 数组。文档中必须至少包含其中一个。

例如,一旦我们最终决定希望 salesMonitor 角色在 sales 数据库上使用 read 角色,我们可能希望重新定义角色的权限和角色数组,以清理实验遗留下来的任何额外权限。您可以通过使用要设置的新信息更新角色来完成此操作

db.updateRole(
"salesMonitor",
{
privileges: [],
roles: [
{
role: "read",
db: "sales"
}
]
}
)

删除用户定义的角色

您可以使用 db.dropRole() 方法删除不必要的角色。

要删除角色,只需将其名称传递给该方法

db.dropRole()

该角色将从系统中删除,并且通过该角色授予用户的任何权限将不再可访问。

结论

在本文中,我们涵盖了很多关于 MongoDB 如何实现访问控制和权限管理的内容。我们了解了系统的概念基础,看到了管理员可用于管理的角色、操作和资源,然后学习了如何使用角色系统来配置整个系统的授权。

这些技能对于为用户提供访问他们完成所需任务所需的资源,同时限制暴露于系统不相关部分是必要的。学习如何定义和利用角色可以提高您在您管理的 MongoDB 系统上提供细粒度访问控制的能力。

常见问题解答

MongoDB 中有两种用于只读用户的内置角色。用户可以分配到 read 角色或 readAnyDatabase 角色。

read 提供了读取所有非系统集合上的数据的能力。

readAnyDatabase 提供的功能与 read 相同,但它还提供了在整个集群上使用 listDatabases 操作的能力。

clusterMonitor 角色提供对监控工具(例如 MongoDB Cloud Manager 和 Ops Manager 监控代理)的只读访问权限。

backup 角色提供备份数据所需的最低权限。此角色提供足够的权限来使用 MongoDB Cloud 和 Ops Manager 备份代理。

它还具有在 adminsettingsconfig 数据库中的备份集合上运行 insertupdate 操作的权限。

MongoDB 中的 root 角色提供对以下角色组合的所有操作和资源的访问权限

  • readWriteAnyDatabase
  • dbAdminAnyDatabase
  • userAdminAnyDatabase
  • clusterAdmin
  • restore
  • backup

MongoDB 采用 RBAC 来管理对 MongoDB 系统的访问。RBAC 是一种安全策略,它根据用户分配的角色限制允许用户的操作。

如果用户没有分配的角色,MongoDB 不允许操作或访问数据库。

关于作者
Justin Ellingwood

Justin Ellingwood

自 2013 年以来,Justin 一直在撰写关于数据库、Linux、基础设施和开发者工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。