MongoDB通过基于角色的授权来授予对数据和命令的访问权限,并提供内置角色,以提供数据库系统中通常需要的不同访问级别。您还可以创建用户定义的角色。
角色授予特权以对定义的资源执行一组操作。给定角色适用于在其上定义了该角色的数据库,并且可以授予访问权限,直至达到粒度的收集级别。
MongoDB的每个内置角色在角色级别的数据库中对所有非系统集合的数据库级别以及所有系统集合的集合级别定义访问 。
MongoDB 在每个数据库上提供内置的数据库用户和
数据库管理角色
。MongoDB仅在数据库上提供所有其他内置角色
。admin
本节介绍每个内置角色的特权。您还可以通过发出rolesInfo
命令,同时将showPrivileges
和
showBuiltinRoles
字段都设置为,来查看内置角色的特权
true
。
每个数据库都包含以下客户端角色:
read
¶提供读取所有非系统集合和system.js
集合上的数据的功能。
在旁边
从MongoDB 4.2开始,该角色不再提供system.namespaces
直接访问集合的特权。从MongoDB 3.0开始,不建议直接访问集合。
在早期版本中,该角色在system.namespaces
集合上提供了上述特权操作,从而允许直接访问。
该角色通过授予以下操作来提供读取访问权限:
listDatabases
特权操作,listDatabases
则如果命令运行时authorizedDatabases
未指定或设置选项,则用户可以运行该命令以返回该用户具有特权的数据库的列表(包括该用户对其特定集合具有特权的数据库)。
到true
。listDatabases
特权操作,则在命令未指定或设置为的情况下运行listDatabases
命令时,用户可以运行该命令以返回用户对其具有find
操作特权
的数据库的列表
。authorizedDatabases
true
listDatabases
特权操作,则用户可以运行listDatabases
命令以返回该用户对其具有find
操作特权的数据库列表
。每个数据库都包含以下数据库管理角色:
dbAdmin
¶提供执行管理任务的能力,例如与模式相关的任务,索引和收集统计信息。该角色不授予用户和角色管理特权。
具体而言,该角色提供以下特权:
资源资源 | 允许的动作 | ||
---|---|---|---|
system.profile |
在旁边 从4.2版开始,MongoDB删除
在早期版本中,该 |
||
所有非系统集合(即数据库资源) |
userAdmin
¶提供在当前数据库上创建和修改角色和用户的功能。由于该userAdmin
角色允许用户向任何用户(包括他们自己)授予任何特权,因此该角色还间接提供了
对数据库或
集群(如果作用域为数据库)的超级用户访问权限admin
。
该userAdmin
角色显式提供以下操作:
changeCustomData
changePassword
createRole
createUser
dropRole
dropUser
grantRole
revokeRole
setAuthenticationRestriction
viewRole
viewUser
警告
重要的是要了解授予userAdmin
角色的安全隐患
:具有数据库角色的用户可以为自己分配该数据库的任何特权。userAdmin
在admin
数据库上授予该
角色具有进一步的安全隐患,因为这间接提供了
超级用户对集群的访问。具有admin
作用域的用户userAdmin
可以授予群集范围内的角色或特权,包括userAdminAnyDatabase
。
该admin
数据库包括以下用于管理整个系统的角色,而不仅仅是一个数据库。这些角色包括但不限于副本集和分片群集管理功能。
clusterAdmin
¶提供最大的群集管理访问。这个角色组合由授予的权限clusterManager
,
clusterMonitor
和hostManager
角色。此外,角色提供了dropDatabase
操作。
clusterManager
¶在版本3.4中更改。
提供对群集的管理和监视操作。具有此角色的用户可以访问config
和local
数据库,分别用于分片和复制。
在整个群集上,允许执行以下操作:
|
在群集中的所有数据库上,允许执行以下操作:
clearJumboFlag
(4.2.3和4.0.15中的新功能)enableSharding
moveChunk
splitChunk
splitVector
在config
数据库上,允许执行以下操作:
资源资源 | 动作 | ||
---|---|---|---|
config 数据库中的所有非系统集合 |
|||
system.js |
在旁边 从4.2版开始,MongoDB删除
在早期版本中,该 |
在local
数据库上,允许执行以下操作:
资源资源 | 动作 | ||
---|---|---|---|
local 数据库中的所有非系统集合 |
|||
system.replset 采集 |
clusterMonitor
¶在版本3.4中更改。
提供对监视工具(例如MongoDB Cloud Manager 和Ops Manager监视代理)的只读访问。
允许对整个群集执行以下操作:
|
允许对集群中的所有数据库执行以下操作:
collStats
dbStats
getShardVersion
indexStats
useUUID
(版本3.6中的新功能)允许对集群中的find
所有system.profile
集合执行操作。
在config
数据库上,允许执行以下操作:
资源资源 | 动作 |
---|---|
config 数据库中的所有非系统集合 |
|
system.js 采集 |
在旁边 从4.2版开始,MongoDB删除
在早期版本中,该角色在 |
在local
数据库上,允许执行以下操作:
资源资源 | 动作 |
---|---|
local 数据库中的所有集合 |