MongoDB数据库学习笔记(三)添加用户,配置权限

数据库角色解析

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集群管理最高的操作权限。该角色包含clusterManagerclusterMonitorhostManager三个角色的所有权限,并且还拥有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")

 

参考文献

  • https://www.cnblogs.com/dbabd/p/10811523.html
  • https://mongoing.com/archives/26710

你可能感兴趣的:(MongoDB)