MongoDB内建角色包括哪些?特点是什么?
Admin 2021-04-29 群英技术资讯 595 次浏览
MongoDB 4.0中的内建角色类型如下:
这里对上面的内建角色所拥有的权限做以说明:
read:用于读取所有非系统集合,以及下面三个系统集合:
system.indexes、system.js以及system.namesp
readWrite:拥有read角色的所有权限,并且可以修改所有非系统集合和system.js集合上的数据
dbAdmin:提供管理相关功能,例如查询统计信息,索引管理等
userAdmin:提供管理数据库角色及用户的权限,具有这个角色的用户可以为当前数据库的任何用户,包括自己,分配任何角色和权限
dbOwner:提供数据库所有者的权限,它可以对数据库进行任何管理操作,这个角色结合了readWrite、dbAdmin、userAdmin三种角色授予的权限。
此类角色提供了管理整个MongoDB的权限,角色只能在admin数据库中进行授权。
clusterManager:提供对集群进行管理和监控的权限
clusterMonitor:提供对监控工具的只读访问权限
hostManager:提供监控和管理服务器的权限
clusterAdmin:提供最高的集群管理访问权限,这个角色拥有clusterManager、clusterMonitor和hostManager角色授予的权限,除此之外,它还具有dropDatabase()权限
此类角色只能在admin数据库中备份和恢复。
backup:提供备份数据的权限,使用mongodump备份整个mongod实例
restore:提供还原数据库所需的权限,使用户可以通过mongorestore恢复数据
全数据库角色用于管理所有自定义数据库,但是不包含local和config数据库,它只能被授予在admin用户下。
root,这个不需要过多解释。
用户只能在admin数据库中配置这个权限,拥有这个角色的用户可以对所有数据库进行任何操作。
__system仅仅用于MongoDB内部的管理,不建议将这个权限分配个用户,防止用户对内部系统进行操作。
上面的内容,更多的是讲述怎样使用内建角色,这里我们来看创建自定义角色的,
自定义角色有如下三个特点:
1、在一般数据库上创建的角色,只适用于当前数据库
2、在admin数据库上创建的角色,可适用于所有数据库
3、创建角色时,角色名字不能重复,否则报错alread exist
例如我们想给一个账号分配insert,update、select、而不给delete权限。
语法:
db.createRole( { role:"<name>", privileges:[ {resource:{<resource>},actions:["action",...]} ], roles:[ {role:"<role>",db:"<database>"}|"<role>" ], authenticationRestrictions:[ {clientSource:["<IP 地址>"|"<CIDR range>",...], {serverAddress:["<IP 地址>"|"<CIDR range>",...]} ] } )
其中,resource为指定数据库或者集合,若设置为空,则默认当前数据库的全部集合。
actions:指定权限
范例:
1、首先我们创建一个角色:
use admin db.createRole( { role:"role_yeyz", privileges:[ {resource:{db:"yeyz",collection:"test"}, actions:["find","insert","update"] } ], roles:[ {role:"read",db:"yeyz1"} ] } )
这个角色的名字叫做role_yeyz,它具有yeyz这个数据库下面的test集合的查找、插入、更新权限。同时它集成了系统的内建权限read,内建权限的生效数据库是yeyz1
2、使用show roles查看当前角色的创建情况
use admin show roles { "role" : "role_yeyz", "db" : "admin", "isBuiltin" : false, "roles" : [ { "role" : "read", "db" : "yeyz1" } ], "inheritedRoles" : [ { "role" : "read", "db" : "yeyz1" } ] }
这里它只显示了内建角色的信息,注意,这个角色所在的db是admin
3、此时我们将这个角色,授予给一个新的用户,yeyz_1
> db.createUser( ... { ... user: "yeyz_1", ... pwd: "123456", ... roles: [ { role: "role_yeyz", db: "admin" }] ... } ... ) Successfully added user: { "user" : "yeyz_1", "roles" : [ { "role" : "role_yeyz", "db" : "admin" } ] }
我们创建了一个新的用户yeyz_1,这个用户继承了我们第一步的自定义角色role_yeyz
4、开始认证并执行相关操作。
[root@VM-0-14-centos ~]# mongo MongoDB shell version v4.0.6 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("b9daecb8-ffd8-44a7-8af0-d1115057539a") } MongoDB server version: 4.0.6 > use admin switched to db admin > db.auth("yeyz_1","123456") 1 > use yeyz switched to db yeyz ### 测试查找,成功 > db.test.find() { "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "aaa" } ### 测试插入,成功 > db.test.insert({"name":"bbb"}) WriteResult({ "nInserted" : 1 }) > db.test.find() { "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "aaa" } { "_id" : ObjectId("5fa7f00e523d80402cdfa326"), "name" : "bbb" } ### 测试更新,成功 > db.test.update({"name":"aaa"},{$set:{"name":"ccc"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > > db.test.find() { "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "ccc" } { "_id" : ObjectId("5fa7f00e523d80402cdfa326"), "name" : "bbb" } ### 测试删除,失败,和我们预期一致,因为role_yeyz这个角色,没有删除权限。 > db.test.remove({"name":"bbb"}) WriteCommandError({ "ok" : 0, "errmsg" : "not authorized on yeyz to execute command { delete: \"test\", ordered: true, lsid: { id: UUID(\"b9daecb8-ffd8-44a7-8af0-d1115057539a\") }, $db: \"yeyz\" }", "code" : 13, "codeName" : "Unauthorized" })
以上就是关于MongoDB角色的介绍,现在大家对MongoDB内建角色的类型及特点都有所了解了,希望上述内容对大家学习有帮助,更多MongoDB角色内容大家可以继续关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
MongoDB 数据库引用 在上一章节MongoDB关系中我们提到了MongoDB的引用来规范数据结构文档。 MongoDB 引用有两种: 手动引用(Manual References)DBRefs DBRefs vs 手动引用 考虑这样的一个场景,我们在不同的集合中 (address_home, address_office, address_mailing, 等)存储不同的地址(住址,办公室地址,邮件地址等)。 这样,我们在调..
这篇文章主要介绍了详解mongoDB主从复制搭建详细过程的相关资料,这里对实现主从复制进行了详细的步骤介绍,需要的朋友可以参考下
MongoDB 聚合 MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。 有点类似 SQL 语句中的 count(*)。 aggregate() 方法 MongoDB中聚合的方法使用aggregate()。 语法 aggregate() 方法的基本语法格式如下所示: >db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION..
很多朋友可能对于MongoDB并不是很熟悉,因此这篇文章主要给大家介绍JavaScript Shell的MongoDB增删查改操作,感兴趣的朋友可以参考学习,下面我们一起来看看。
更新数据操作是数据库的日常操作,那么mongodb更新数据的方法有哪些呢?下面就给大家分享关于mongodb更新数据的方法,有字段更新,数组更新等等方法,接下来跟随小编一起看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008