简介
授权是用户管理和访问控制的重要组成部分,它定义了每个用户被允许在系统上执行哪些操作的策略。确定适当的策略并在数据库中实施这些策略,可确保用户可以与他们需要的资源进行交互,同时防止不当行为。
在本指南中,我们将介绍 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 | 集合 | 允许用户在 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.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
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
数组。文档中必须至少包含其中一个。
例如,一旦我们最终决定要让 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
操作的能力。
The 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 不允许操作或访问数据库。