MongoDB数据库的内置用户角色有以下几种:
1.数据库用户角色
1.1'read'角色包含读取所有非系统集合数据,通俗理解就是有权限读取除去系统自带的数据库(admin,local,config)之外的数据库。
1.2'readWrite'角色包含read角色的权限同时增加了对非系统集合数据的修改权限,通俗理解就是在拥有‘read’查询权限的基础上增加了写入和删除的权限。
2.数据库管理角色
2.1‘dbAdmin’角色包含执行某些管理任务(与schema相关、索引、收集统计信息)的权限,该角色不包含用户和角色管理的权限。通俗理解就是授予执行管理任务的特权.(实际测试在数据方面既不包含‘read’也不包含‘readWrite’,在权限方面既不能添加和修改用户,也不能删除用户【很尴尬】。考虑可能是用于控制执行管理任务的权限,由于还没有用到所以暂时不是很理解【嘻嘻】)
2.2‘userAdmin’角色包含对当前数据库创建和修改角色和用户的权限。该角色允许向其它任何用户(包括自身)授予任何权限,所以这个角色也提供间接对超级用户(root)的访问权限,如果限定在admin数据中,也包括集群管理的权限。通俗理解就是允许您在当前数据库上创建和修改用户和角色(实际测试在数据方面既不包含‘read’也不包含‘readWrite’,用户权限方面可以添加用户【db.createUser】、可以删除用户【db.dropUser】、但是不能修改用户【db.updateUser】)。
2.2‘dbOwner’角色包含对数据所有的管理操作权限。即包含角色readWrite、dbAdmin和userAdmin的权限。通俗理解就是上面角色的权限都包含。(实际测试在数据方面包含增删改查,用户权限方面可以创建用户【db.createUser】,删除用户【db.dropUser】但是不能修改用户【db.updateUser】)
3.集群管理员角色
3.1'clusterManager'角色包含对集群监控和管理操作的权限。拥有此角色的用户能够访问集群中的config数据库和local数据库。
3.2'clusterMonitor'角色包含针对监控工具具有只读操作的权限。
3.3'hostManager'角色包含针对数据库服务器的监控和管理操作权限。
3.4'clusterAdmin'角色包含MongoDB集群管理最高的操作权限。该角色包含clusterManager、clusterMonitor和hostManager三个角色的所有权限,并且还拥有dropDatabase操作命令的权限。
4.备份和恢复角色
4.1'backup'角色包含备份MongoDB数据最小的权限,提供备份数据所需的特权。
4.2'restore'角色包含从备份文件中还原恢复MongoDB数据(除了system.profile集合)的权限。
5.全数据库级角色
5.1'readAnyDatabase'角色包含对除了config和local之外所有数据库的只读权限。同时对于整个集群包含listDatabases命令操作。
5.2'readWriteAnyDatabase'角色包含对除了config和local之外所有数据库的读写权限。同时对于整个集群包含listDatabases命令操作。
5.3'userAdminAnyDatabase'角色包含类似于userAdmin角色对于所有数据库的用户管理权限,除了config数据库和local数据库。
5.4'dbAdminAnyDatabase'角色包含类似于dbAdmin角色对于所有数据库管理权限,除了config数据库和local数据库。同时对于整个集群包含listDatabases命令操作。
6.超级用户角色
6.1'root'角色包含角色readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin、restore和backup联合之后所有的权限。
由于目前仅仅了解了MongoDB数据库的基础操作(数据和数据库用户的增删改查)不知道如何测试其他角色的权限,暂时不做研究,简单记载一下,方便查阅,在后面的学习中和实际应用中理解角色的权限)。
通过以上对内置角色的说明,总结一下较为常用的内置角色,如下表:
角色 | 权限描述 |
---|---|
read | 可以读取指定数据库中任何数据。 |
readWrite | 可以读写指定数据库中任何数据,包括创建、重命名、删除集合。 |
readAnyDatabase | 可以读取所有数据库中任何数据(除了数据库config和local之外)。 |
readWriteAnyDatabase | 可以读写所有数据库中任何数据(除了数据库config和local之外)。 |
dbAdmin | 可以读取指定数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作。 |
dbAdminAnyDatabase | 可以读取任何数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作(除了数据库config和local之外)。 |
clusterAdmin | 可以对整个集群或数据库系统进行管理操作。 |
userAdmin | 可以在指定数据库创建和修改用户。 |
userAdminAnyDatabase | 可以在指定数据库创建和修改用户(除了数据库config和local之外)。 |
其次,了解到MongoDB可以创建自定义权限的角色,此处提一句,方面后面学习中注意一下。
1.添加用户
db.createUser({user:'test3',pwd:'test3',roles:[{role:'dbAdmin',db:'test'}]})
2.修改用户
db.updateUser("test",{roles:[{role:'readWrite',db:'test'}]})
3.查询用户
show users
4.删除用户
db.dropUser("test")