
# 预置角色
预置角色是系统自动生成的角色信息，客户端可用的预置角色名称有read，readWrite。
mongodb使用角色来管理数据库的，所以创建一个用户时就需要赋予一个角色。角色除了内置之外，也可以[自定义角色](https://support.huaweicloud.com/devg-dds/dds_devg_0101.html)。
表1常见内置角色 
| 角色                   | 权限描述                                                                                                            | 包含的操作命令                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|
| read                 | read角色包含读取所有非系统集合数据和订阅部分系统集合(system.indexes、system.js、system.namespaces)的权限。                                    | changeStream、collStats、dbHash、dbStats、find、killCursors、listIndexes、listCollections                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| readWrite            | readWrite角色包含read角色的权限同时增加了对非系统集合数据的修改权限，但只对系统集合system.js有修改权限。                                                 | collStats、convertToCapped、createCollection、dbHash、dbStats、dropCollection、createIndex、dropIndex、find、insert、killCursors、listIndexes、listCollections、remove、renameCollectionSameDB、update                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| readAnyDatabase      | readAnyDatabase角色包含对除了config和local之外所有数据库的只读权限。同时对于整个集群包含listDatabases命令操作。                                     | 在MongoDB3.4版本之前，该角色包含对config和local数据库的读取权限。当前版本如果需要对这两个数据库进行读取，则需要在admin数据库授予用户对这两个数据库的read角色。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| readWriteAnyDatabase | readWriteAnyDatabase角色包含对除了config和local之外所有数据库的读写权限。同时对于整个集群包含listDatabases命令操作。                                | 在MongoDB3.4版本之前，该角色包含对config和local数据库的读写权限。当前版本如果需要对这两个数据库进行读写，则需要在admin数据库授予用户对这两个数据库的readWrite角色。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| dbAdmin              | dbAdmin角色包含执行某些管理任务(与schema相关、索引、收集统计信息)的权限，该角色不包含用户和角色管理的权限。                                                   | - 对于系统集合(system.indexes、system.namespaces、system.profile)包含命令操作：collStats、dbHash、dbStats、find、killCursors、listIndexes、listCollections、dropCollection and createCollection(仅适用system.profile)  - 对于非系统集合包含命令操作：bypassDocumentValidation、collMod、collStats、compact、convertToCapped、createCollection、createIndex、dbStats、dropCollection、dropDatabase、dropIndex、enableProfiler、reIndex、renameCollectionSameDB、repairDatabase、storageDetails、validate   |
| dbAdminAnyDatabase   | dbAdminAnyDatabase角色包含类似于dbAdmin角色对于所有数据库管理权限，除了config数据库和local数据库。同时对于整个集群包含listDatabases命令操作。                 | 在MongoDB3.4版本之前，该角色包含对config和local数据库的管理权限。当前版本如果需要对这两个数据库进行管理，则需要在admin数据库授予用户对这两个数据库的dbAdmin角色。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| clusterAdmin         | clusterAdmin角色包含MongoDB集群管理最高的操作权限。                                                                             | clusterManager、clusterMonitor和hostManager三个角色的所有权限，并且还拥有dropDatabase操作命令的权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| userAdmin            | userAdmin角色包含对当前数据库创建和修改角色和用户的权限。该角色允许向其它任何用户(包括自身)授予任何权限，所以这个角色也提供间接对超级用户(root)的访问权限，如果限定在admin数据中，也包括集群管理的权限。 | changeCustomData、changePassword、createRole、createUser、dropRole、dropUser、grantRole、revokeRole、setAuthenticationRestriction、viewRole、viewUser                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| userAdminAnyDatabase | userAdminAnyDatabase角色包含类似于userAdmin角色对于所有数据库的用户管理权限，除了config数据库和local数据库。                                      | - 对于集群包含命令操作：authSchemaUpgrade、invalidateUserCache、listDatabases  - 对于系统集合admin.system.users和admin.system.roles包含命令操作：collStats、dbHash、dbStats、find、killCursors、planCacheRead、createIndex、dropIndex                                                                                                                                                                                                                                                     |
   
