• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解MongoDB的角色管理

    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中的角色特点

    NO.2 创建自定义角色

        上面的内容,更多的是讲述怎样使用内建角色,这里我们来看创建自定义角色的,

    自定义角色有如下三个特点:

    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中的日志模块
    • MongoDB聚合group的操作指南
    • java操作mongodb之多表联查的实现($lookup)
    • 2021最新版windows10系统MongoDB数据库安装及配置环境
    • MongoDB 常用的数据类型和基本操作
    • MongoDB 简单入门教程(安装、基本概念、创建用户)
    • MongoDB 主分片(primary shard)相关总结
    • MongoDB 监控工具mongostat和mongotop的使用
    • MongoDB 副本集的搭建过程
    • MongoDB的chunk详解
    上一篇:MongoDB 监控工具mongostat和mongotop的使用
    下一篇:MongoDB 主分片(primary shard)相关总结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解MongoDB的角色管理 详解,MongoDB,的,角色,管理,