• 售前

  • 售后

热门帖子
入门百科

详解MongoDB的角色管理

[复制链接]
我心如烟卸 显示全部楼层 发表于 2021-8-14 14:30:27 |阅读模式 打印 上一主题 下一主题
目次


  • NO.1 MongoDB内建脚色

    • 内建脚色的种类和特点?
    • 数据库用户脚色:
    • 数据库管理脚色:
    • 集群管理脚色:
    • 备份和规复脚色:
    • 全数据库脚色
    • 超级用户:
    • 内部脚色:
    • MongoDB中的脚色特点

  • NO.2 创建自定义脚色

NO.1 MongoDB内建脚色


内建脚色的种类和特点?

想要相识内建脚色,还是少不了下面这张图,在MongoDB中,用户的权限是通过脚色绑定的方法来分配的。把某个脚色绑定在某个用户上,那么这个用户就有这个脚色对应的权限了。

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内部的管理,不发起将这个权限分配个用户,防止用户对内部系统进行操纵。

MongoDB中的脚色特点

      
  • 在MongoDB中,授予用户某个脚色的权限时,默认授予当前数据库  
  • 脚色授权可以授予集合级别的粒度  
  • 脚色授权分成系统集合以及非系统集合的访问权限  
  • 每个数据库中的脚色都可以分成一样平常脚色和管理脚色  
  • 管理数据库可以使用全部的内建脚色

NO.2 创建自定义脚色

    上面的内容,更多的是报告怎样使用内建脚色,这里我们来看创建自定义脚色的,
自定义脚色有如下三个特点:
1、在一样平常数据库上创建的脚色,只实用于当前数据库
2、在admin数据库上创建的脚色,可实用于全部数据库
3、创建脚色时,脚色名字不能重复,否则报错alread exist
例如我们想给一个账号分配insert,update、select、而不给delete权限。
语法:
  1. db.createRole(
  2. {
  3. role:"<name>",
  4. privileges:[
  5.        {resource:{<resource>},actions:["action",...]}
  6.       ],
  7. roles:[
  8.      {role:"<role>",db:"<database>"}|"<role>"
  9.     ],
  10. authenticationRestrictions:[
  11.                {clientSource:["<IP 地址>"|"<CIDR range>",...],
  12.                {serverAddress:["<IP 地址>"|"<CIDR range>",...]}
  13.               ]
  14. }
  15. )
复制代码
此中,resource为指定命据库或者集合,若设置为空,则默认当前数据库的全部集合。
actions:指定权限
范例:
1、起首我们创建一个脚色:
  1. use admin
  2. db.createRole(
  3. {
  4. role:"role_yeyz",
  5. privileges:[
  6.        {resource:{db:"yeyz",collection:"test"},
  7.        actions:["find","insert","update"]
  8.        }
  9.       ],
  10. roles:[
  11.      {role:"read",db:"yeyz1"}
  12.     ]
  13. }
  14. )
复制代码
这个脚色的名字叫做role_yeyz,它具有yeyz这个数据库下面的test集合的查找、插入、更新权限。
同时它集成了系统的内建权限read,内建权限的生效数据库是yeyz1
2、使用show roles查察当前脚色的创建环境
  1. use admin
  2. show roles
  3. {
  4.     "role" : "role_yeyz",
  5.     "db" : "admin",
  6.     "isBuiltin" : false,
  7.     "roles" : [
  8.         {
  9.             "role" : "read",
  10.             "db" : "yeyz1"
  11.         }
  12.     ],
  13.     "inheritedRoles" : [
  14.         {
  15.             "role" : "read",
  16.             "db" : "yeyz1"
  17.         }
  18.     ]
  19. }
复制代码
这里它只表现了内建脚色的信息,留意,这个脚色地点的db是admin
3、此时我们将这个脚色,授予给一个新的用户,yeyz_1
  1. > db.createUser(
  2. ... {
  3. ... user: "yeyz_1",
  4. ... pwd: "123456",
  5. ... roles: [ { role: "role_yeyz", db: "admin" }]
  6. ... }
  7. ... )
  8. Successfully added user: {
  9.     "user" : "yeyz_1",
  10.     "roles" : [
  11.         {
  12.             "role" : "role_yeyz",
  13.             "db" : "admin"
  14.         }
  15.     ]
  16. }
复制代码
我们创建了一个新的用户yeyz_1,这个用户继承了我们第一步的自定义脚色role_yeyz
4、开始认证并实验干系操纵。
  1. [root@VM-0-14-centos ~]# mongo
  2. MongoDB shell version v4.0.6
  3. connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
  4. Implicit session: session { "id" : UUID("b9daecb8-ffd8-44a7-8af0-d1115057539a") }
  5. MongoDB server version: 4.0.6
  6. > use admin
  7. switched to db admin
  8. > db.auth("yeyz_1","123456")
  9. 1
  10. > use yeyz
  11. switched to db yeyz
  12. ### 测试查找,成功
  13. > db.test.find()
  14. { "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "aaa" }
  15. ### 测试插入,成功
  16. > db.test.insert({"name":"bbb"})
  17. WriteResult({ "nInserted" : 1 })
  18. > db.test.find()
  19. { "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "aaa" }
  20. { "_id" : ObjectId("5fa7f00e523d80402cdfa326"), "name" : "bbb" }
  21. ### 测试更新,成功
  22. > db.test.update({"name":"aaa"},{$set:{"name":"ccc"}})
  23. WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
  24. >
  25. > db.test.find()
  26. { "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "ccc" }
  27. { "_id" : ObjectId("5fa7f00e523d80402cdfa326"), "name" : "bbb" }
  28. ### 测试删除,失败,和我们预期一致,因为role_yeyz这个角色,没有删除权限。
  29. > db.test.remove({"name":"bbb"})
  30. WriteCommandError({
  31.     "ok" : 0,
  32.     "errmsg" : "not authorized on yeyz to execute command { delete: "test", ordered: true, lsid: { id: UUID("b9daecb8-ffd8-44a7-8af0-d1115057539a") }, $db: "yeyz" }",
  33.     "code" : 13,
  34.     "codeName" : "Unauthorized"
  35. })
复制代码
以上就是详解MongoDB的脚色管理的具体内容,更多关于MongoDB的脚色管理的资料请关注草根技能分享别的干系文章!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作