权限操作

    在本页面

    权限操作定义了用户可以对资源执行的操作。MongoDB 权限包括 资源和允许的操作。此页面列出了按通用目的分组的可用操作。

    MongoDB为内置角色提供了预定义的资源对和允许的操作对。有关授予的操作的列表,请参见 内置角色。要定义自定义角色,请参阅 创建用户定义的角色

    查询和写操作

    • find

    用户可以执行以下命令及其等效的帮助方法:

    输出到集合时,mapReduce命令和 db.collection.mapReduce辅助方法的查询部分是必需的。

    findAndModify命令行和db.collection.findAndModify辅助方法的查询部分是必需的。

    cloneCollectionAsCappedrenameCollection命令行以及db.collection.renameCollection()辅助方法要求有源集合。

    • 对于MongoDB 4.0.6+:

      如果用户没有listDatabases 操作权限,用户运行listDatabases 命令行时authorizedDatabases未指定或设置选项为true,则用户可以运行该命令以返回该用户具有权限的数据库的列表(包括该用户对特定集合具有权限的数据库)。

    • 对于MongoDB 4.0.5:

      如果用户没有listDatabases 操作权限,在authorizedDatabases未指定选项或设置为true的情况下运行listDatabases 命令时,用户可以运行该命令以返回该用户对其具有find操作权限的数据库的列表 。

    • 对于MongoDB 4.0.0-4.0.4:

      如果用户没有listDatabases 操作权限,则用户可以运行listDatabases 命令以返回该用户对其具有find操作权限的数据库列表 。

    将此操作应用于数据库或集合资源。

    • update

    用户可以执行update命令和等效的帮助方法。

    在不指定replace操作的情况下输出到集合时,mapReduce命令和 db.collection.mapReduce()辅助方法是必需的 。

    findAndModify命令和 db.collection.findAndModify()辅助方法是必需的。

    将此操作应用于数据库或集合资源。

    • bypassDocumentValidation

    3.2版中的新功能。

    用户可以绕过支持bypassDocumentValidation选项的命令和方法的文档验证。以下命令及其等效方法支持绕过文档验证:

    将此操作应用于数据库或集合资源。

    • useUUID

    3.6版的新功能。

    用户可以使用UUID来执行以下命令 ,就像它是名称空间一样:

    例如,此权限授权用户运行以下命令,该find命令对具有给定UUID的集合执行命令。为了获得成功,此操作还需要授权用户find在与给定UUID对应的集合名称空间上执行命令。

    复制

    1. db.runCommand({find: UUID("123e4567-e89b-12d3-a456-426655440000")})

    有关集合UUID的更多信息,请参见 集合

    将此操作应用于cluster资源。

    数据库管理操作

    • changeCustomData

      用户可以更改给定数据库中任何用户的自定义信息。将此操作应用于数据库资源。

    • changeOwnCustomData

      用户可以更改自己的自定义信息。将此操作应用于数据库资源。另请参阅 更改密码和自定义数据

    • changePassword

      用户可以更改给定数据库中任何用户的密码。将此操作应用于数据库资源。

    • createCollection

      用户可以执行db.createCollection()方法。将此操作应用于数据库或集合资源。

    • createIndex

    提供对db.collection.createIndex()方法和createIndexes命令的访问。将此操作应用于数据库或集合资源。

    • createRole

      用户可以在给定的数据库中创建新角色。将此操作应用于数据库资源。

    • createUser

    用户可以在给定的数据库中创建新用户。将此操作应用于数据库资源。

    • dropCollection

    用户可以执行该db.collection.drop()方法。将此操作应用于数据库或集合资源。

    • dropRole

    用户可以从给定的数据库中删除任何角色。将此操作应用于数据库资源。

    • dropUser

    用户可以从给定的数据库中删除任何用户。将此操作应用于数据库资源。

    • enableProfiler

    用户可以执行db.setProfilingLevel()方法。将此操作应用于数据库资源。

    • grantRole

    用户可以将数据库中的任何角色从系统中的任何数据库授予任何用户。将此操作应用于数据库资源。

    • killCursors

      从MongoDB 4.2开始,用户始终可以关闭自己的游标,而不管用户是否具有 killCursors的权限。因此,该killCursors 权限在MongoDB 4.2+中无效。

      在MongoDB 3.6.3到MongoDB 4.0.x中,killCursors启用访问控制后,用户需要权限来关闭自己的游标。游标创建时,游标与用户相关联。将此操作应用于收集资源。

    • killAnyCursor

      版本3.6.3中的新功能。

      用户可以关闭任何游标,甚至可以关闭其他用户创建的游标。将此操作应用于收集资源。

    • revokeRole

    用户可以从系统中任何数据库的任何用户中删除任何角色。将此操作应用于数据库资源。

    • setAuthenticationRestriction

    3.6版的新功能。

    运行以下命令时,用户可以在user文档中指定 authenticationRestrictions字段:

    • createUser

      运行以下命令时,用户可以authenticationRestrictionsrole文档中指定字段 :

    • createRole

      注意

      以下内置角色授予此权限:

    • userAdmin角色提供对数据库的这一权限的角色分配。

      在传递上,restoreroot角色也提供此特权。

      将此操作应用于数据库资源。

    • unlock

      用户可以执行db.fsyncUnlock()方法。将此操作应用于cluster资源。

    • viewRole

      用户可以查看有关给定数据库中任何角色的信息。将此操作应用于数据库资源。

    • viewUser

      用户可以在给定的数据库中查看任何用户的信息。将此操作应用于数据库资源。

    部署管理操作

    • authSchemaUpgrade

      用户可以执行authSchemaUpgrade命令。将此操作应用于cluster资源。

    • cleanupOrphaned

      用户可以执行cleanupOrphaned命令。将此操作应用于cluster资源。

    • cpuProfiler

      用户可以启用和使用CPU分析器。将此操作应用于 cluster资源。

    • inprog

      用户可以使用db.currentOp()方法返回有关挂起和活动操作的信息。将此操作应用于cluster资源。

      在版本3.2.9中进行了更改:即使没有inprog权限,用户也可以在mongod实例上通过运行db.currentOp( { "$ownOps": true } )来查看自己的操作。

    • invalidateUserCache

      提供对invalidateUserCache命令的访问。将此操作应用于cluster资源。

    • killop

    用户可以执行db.killOp()方法。将此操作应用于cluster资源。

    在版本3.2.9中进行了更改:即使没有killop权限,在 mongod实例上,用户也可以关闭自己的操作。

    • planCacheRead

    用户可以执行以下操作:

    • planCacheWrite

    用户可以执行planCacheClear命令以及 PlanCache.clear()PlanCache.clearPlansByQuery() 方法。将此操作应用于数据库或集合资源。

    • storageDetails

    用户可以执行storageDetails命令。将此操作应用于数据库或集合资源。

    变更流操作

    • changeStream

    用户在指定集合上使用changeStreamfind上,在指定数据库中的所有非system集合或所有数据库中的所有非system集合都可以为这些资源打开变更流游标

    复制操作

    • appendOplogNote

      用户可以在操作日志中添加注释。将此操作应用于 cluster资源。

    • replSetConfigure

      用户可以配置副本集。将此操作应用于cluster 资源。

    • replSetGetConfig

    用户可以查看副本集的配置。提供对replSetGetConfig命令和rs.conf()辅助方法的访问 。

    将此操作应用于cluster资源。

    • replSetGetStatus

      用户可以执行replSetGetStatus命令。将此操作应用于cluster资源。

    • replSetHeartbeat

      用户可以执行replSetHeartbeat命令。将此操作应用于cluster资源。

    • replSetStateChange

    用户可以通过 replSetFreezereplSetMaintenancereplSetStepDown,和replSetSyncFrom 命令改变一个副本集的状态。将此操作应用于cluster资源。

    • resync

    用户可以执行resync命令。将此操作应用于cluster资源。

    分片操作

    • addShard

    用户可以执行addShard命令。将此操作应用于cluster资源。

    • clearJumboFlag

    从4.2.3和4.0.15开始可用

    使用clearJumboFlag命令清除块的巨型标志所必需 。将此操作应用于数据库或集合资源。

    包含在clusterManager内置角色中。

    • enableSharding

    适用资源

    该操作可以应用于以下任一情况:

    • 数据库集合资源,用于为数据库启用分片或对集合进行分片。
    • 群集资源以执行各种分片区操作(从版本4.2.2、4.0.14、3.6.16开始)。
    资源 描述
    数据库集合 授予用户执行以下操作的权限:使用以下enableSharding命令在数据库上启用分片 ,然后使用shardCollection 命令对集合进行分片。
    群集从版本4.2.2、4.0.14、3.6.16开始 授予用户执行以下分区域操作的权限:- addShardToZone - updateZoneKeyRange - removeShardFromZone 如果对数据库中的相应集合执行find/ update操作,则还可以执行这些分片区 config操作。有关详细信息,请参见具体操作。
    • flushRouterConfig

    用户可以执行flushRouterConfig命令。将此操作应用于cluster资源。

    • getShardMap

    用户可以执行getShardMap命令。将此操作应用于cluster资源。

    • getShardVersion

      用户可以执行getShardVersion命令。将此操作应用于数据库资源。

    • listShards

      用户可以执行listShards命令。将此操作应用于cluster资源。

    • moveChunk

    用户可以执行moveChunk命令。此外,如果将权限应用于适当的数据库资源,则用户可以执行movePrimary命令。将此操作应用于数据库或集合资源。

    • removeShard

    用户可以执行removeShard命令。将此操作应用于cluster资源。

    • shardingState

    用户可以执行shardingState命令。将此操作应用于cluster资源。

    • splitChunk

    用户可以执行splitChunk命令和 mergeChunks命令。将此操作应用于数据库或集合资源。

    • splitVector

    用户可以执行splitVector命令。将此操作应用于数据库或集合资源。

    服务器管理操作

    • applicationMessage

    用户可以执行logApplicationMessage命令。将此操作应用于cluster资源。

    • closeAllDatabases

    用户可以执行closeAllDatabases命令。将此操作应用于cluster资源。

    • collMod

    用户可以执行collMod命令。将此操作应用于数据库或集合资源。

    • compact

    用户可以执行compact命令。将此操作应用于数据库或集合资源。

    • connPoolSync

    用户可以执行connPoolSync命令。将此操作应用于cluster资源。

    • convertToCapped

    用户可以执行convertToCapped命令。将此操作应用于数据库或集合资源。

    • dropConnections

    用户可以执行dropConnections命令。将此操作应用于cluster资源。

    • dropDatabase

    用户可以执行dropDatabase命令。将此操作应用于数据库资源。

    • dropIndex

    用户可以执行dropIndexes命令。将此操作应用于数据库或集合资源。

    • forceUUID

    3.6版的新功能。

    用户可以使用 applyOps命令使用用户定义的集合UUID创建集合。

    将此操作应用于cluster资源。

    • fsync

    用户可以执行fsync命令。将此操作应用于cluster资源。

    • getParameter

    用户可以执行getParameter命令。将此操作应用于cluster资源。

    • hostInfo

    提供有关运行MongoDB实例的服务器的信息。将此操作应用于cluster资源。

    • logRotate

    用户可以执行logRotate命令。将此操作应用于cluster资源。

    • reIndex

    用户可以执行reIndex命令。将此操作应用于数据库或集合资源。

    • renameCollectionSameDB

      允许用户使用renameCollection命令在当前数据库上重命名集合 。将此操作应用于数据库资源。

      此外,用户必须拥有 find源集合或者没有 find目标集合。

      如果已经存在使用新名称的集合,则用户还必须使用dropCollection对目标集合执行操作。

    • setParameter

    用户可以执行setParameter命令。将此操作应用于cluster资源。

    • shutdown

    用户可以执行shutdown命令。将此操作应用于cluster资源。

    • touch

    用户可以执行touch命令。将此操作应用于cluster资源。

    会话的操作

    • impersonate

    3.6版的新功能。

    用户可以使用usersroles模式执行killAllSessionsByPattern命令。将此操作应用于 cluster资源。

    要运行killAllSessionsByPattern命令,用户还必须对群集资源具有killAnySession权限。

    • listSessions

      3.6版的新功能。

      用户可以为所有用户或指定用户执行$listSessions一项或 $listLocalSessions多项操作。将此操作应用于cluster资源。

    免费的监控操作

    • checkFreeMonitoringStatus

    cluster资源执行此操作的用户可以检查“ 免费监控”的状态。

    4.0版本中的新功能。

    • setFreeMonitoring

    cluster资源执行此操作的用户可以启用或禁用“ 免费监控”

    4.0版本中的新功能。

    诊断操作

    • collStats

    用户可以执行collStats命令。将此操作应用于数据库或集合资源。

    • connPoolStats

    用户可以执行connPoolStatsshardConnPoolStats 命令。将此操作应用于cluster资源。

    • cursorInfo

    用户可以执行cursorInfo命令。将此操作应用于cluster资源。

    • dbHash

    用户可以执行dbHash命令。将此操作应用于数据库或集合资源。

    • dbStats

    用户可以执行dbStats命令。将此操作应用于数据库资源。

    • getCmdLineOpts

    用户可以执行getCmdLineOpts命令。将此操作应用于cluster资源。

    • getLog

    用户可以执行getLog命令。将此操作应用于cluster资源。

    • indexStats

    用户可以执行indexStats命令。将此操作应用于数据库或集合资源。

    在版本3.0中进行了更改: MongoDB 3.0删除了该indexStats命令。

    • listDatabases

    用户可以执行listDatabases命令。将此操作应用于cluster资源。

    • 对于MongoDB 4.0.6+:

      如果用户没有listDatabases 操作权限,则如果运行listDatabases 命令时authorizedDatabases未指定或设置选项为true,则用户可以运行该命令以返回该用户具有权限的数据库的列表(包括该用户对特定集合具有权限的数据库)。

    • 对于MongoDB 4.0.5:

      如果用户没有listDatabases 操作权限,则在authorizedDatabases命令未指定选项或设置为true的情况下运行listDatabases 命令时,用户可以运行该命令以返回该用户对其具有find操作权限的数据库的列表 。

    • 对于MongoDB 4.0.0-4.0.4:

      如果用户没有listDatabases 操作权限,则用户可以运行listDatabases 命令以返回该用户对其具有find操作权限的数据库列表 。

    • listCollections

    用户可以执行listCollections命令。将此操作应用于数据库资源。

    注意

    从4.0版本开始,没有所需权限的用户可以 authorizedCollectionsnameOnly选项都设置为true的情况下运行listCollections命令。在这种情况下,该命令仅返回用户具有特权的集合的名称和类型。

    • listIndexes

    用户可以执行listIndexes命令。将此操作应用于数据库或集合资源。

    • netstat

    用户可以执行netstat命令。将此操作应用于cluster资源。

    • serverStatus

    用户可以执行serverStatus命令。将此操作应用于cluster资源。

    • validate

    用户可以执行validate命令。将此操作应用于数据库或集合资源。

    • top

    用户可以执行top命令。将此操作应用于 cluster资源。

    内部操作

    • anyAction

    允许对资源执行任何操作。除非绝对必要,否则不要分配此操作。

    • internal

    允许内部动作。除非绝对必要,否则不要分配此操作。

    原文链接:https://docs.mongodb.com/manual/reference/privilege-actions/

    译者:谢伟成

    参见

    原文 - Privilege Actions