MongoDB权限配置系统详解
MongoDB的权限配置系统是其安全架构的重要组成部分,它允许数据库管理员通过角色和权限来控制用户对数据库资源的访问。本文将详细介绍MongoDB的权限配置系统,包括角色分类、权限说明、用户创建与管理、以及权限配置的具体操作。
一、角色与权限
MongoDB使用基于角色的访问控制(RBAC)来管理用户对实例的访问。通过对用户授予一个或多个角色,可以控制用户访问数据库资源的权限和数据库操作的权限。在对用户分配角色之前,用户无法访问实例。
1. 角色分类
MongoDB内部提供了一系列内置的角色,这些角色是为了完成一些基本的数据库操作。每个内置角色提供了用户在角色数据库内数据库级别所有非系统类集合的访问权限,也提供了对集合级别所有系统集合的访问权限。MongoDB在每个数据库上都提供内置的数据库用户角色和数据库管理角色,但只在admin数据库中提供其它的内置角色。
-
数据库用户角色:
- read:可以读取指定数据库中任何数据。
- readWrite:可以读写指定数据库中任何数据,包括创建、重命名、删除集合。
-
数据库管理角色:
- dbAdmin:可以读取指定数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作。
- dbOwner:提供对指定数据库的所有权限,包括创建、删除集合和索引,以及管理用户和角色。
- userAdmin:可以在指定数据库创建和修改用户。
-
集群管理角色:
- clusterAdmin:可以对整个集群或数据库系统进行管理操作,如访问分片、复制集配置等。
- clusterManager:提供集群管理权限,如添加、删除分片,但不包括访问配置数据。
- clusterMonitor:提供监控集群的权限,如访问复制集和分片的状态信息。
- hostManager:提供管理服务器主机的权限,如关闭服务器。
-
数据库备份、恢复角色:
- backup:包含备份MongoDB数据最小的权限。
- restore:包含从备份文件中还原恢复MongoDB数据(除了system.profile集合)的权限。
-
全数据库级角色:
- readAnyDatabase:可以读取所有数据库中任何数据(除了数据库config和local之外)。
- readWriteAnyDatabase:可以读写所有数据库中任何数据(除了数据库config和local之外)。
- dbAdminAnyDatabase:可以读取任何数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作(除了数据库config和local之外)。
- userAdminAnyDatabase:可以在任何数据库中创建和修改用户(除了数据库config和local之外)。
-
超级用户角色:
- root:包含角色readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin、restore和backup联合之后所有的权限。
-
内部角色:
- __system:内部使用,用于管理MongoDB系统用户。
2. 权限说明
权限由指定的数据库资源(数据库、集合、部分集合和集群)以及允许在指定资源上进行的操作(增、删、改、查等)组成。
- read:允许用户读取指定数据库的数据。
- readWrite:允许用户读写指定数据库的数据,包括创建、重命名、删除集合。
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除、查看统计或访问system.profile。
- userAdmin:允许用户向system.users集合写入,可以在指定数据库中创建、删除和管理用户。
- clusterAdmin:必须在admin数据库中定义,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:必须在admin数据库中定义,赋予用户所有数据库的读权限。
- readWriteAnyDatabase:必须在admin数据库中定义,赋予用户所有数据库的读写权限。
- userAdminAnyDatabase:必须在admin数据库中定义,赋予用户所有数据库的userAdmin权限。
- dbAdminAnyDatabase:必须在admin数据库中定义,赋予用户所有数据库的dbAdmin权限。
- root:必须在admin数据库中定义,超级账号,拥有超级权限。
二、MongoDB创建用户及删除用户
在MongoDB中,用户的管理包括创建用户、查看用户信息、修改用户密码以及删除用户。
1. 创建用户
创建用户需要在指定的数据库中执行,通常是在admin数据库中创建管理员用户。使用db.createUser
命令来创建用户。