MongoDB安全认证之用户、角色相关操作

  MongoDB 默认是没有账号的,可以直接连接,⽆须身份验证。这就导致任何用户只要可能进入MongoDB数据库就可以对该数据库进行任意操作——在实际项⽬中这样的后果不堪设想,肯定是要权限验证的。
  官网Security — MongoDB Manual提供了安装方面的详细介绍。本文主要关注用户、角色相关操作,具体就是:
      

      

  一、用户相关操作

    参考Users — MongoDB Manual

    1、切换到admin数据库对⽤户的添加

      use admin;
      db.createUser(userDocument):⽤于创建 MongoDB 登录⽤户以及分配权限的⽅法

      db.createUser(

      {

        user: "账号",    //创建的⽤户名称,如 admin、 root 等

        pwd: "密码",    //⽤户登录的密码

        roles: [      //为⽤户分配的⻆⾊,不同的⻆⾊拥有不同的权限,参数是数组,可以同时设置多个

          { role: "⻆⾊", db: "安全认证的数据库" },  //⻆⾊, MonngoDB 已经约定好的⻆⾊,不同的⻆⾊对应不同的权限 后⾯会对role做详细解释

          { role: "⻆⾊", db: "安全认证的数据库" }  //数据库实例名称,如 MongoDB 4.0.2 默认⾃带的有 admin、 local、 config、 test 等,即为哪个数据库实例设置⽤户

        ]

      })

    2、修改密码
      db.changeUserPassword( 'root' 'rootNew' );

    3、⽤户添加⻆⾊

      db.grantRolesToUser( '⽤户名, [{ role: '⻆⾊名, db: '数据库名'}])

    4、auth ⽅向启动mongod

      ./bin/mongod -f conf/mongo.conf --auth  (也可以在mongo.conf 中添加security的配置

    5、验证⽤户
      db.auth("账号","密码")
    6、删除⽤户

      db.dropUser("⽤户名")

  二、角色相关操作

    在createUser就使用到了roles,角色分为MongoDB内置角色和用户自定义角色。用户可以根据需要添加角色:

      

    内置角色有:

      read:允许⽤户读取指定数据库
      readWrite:允许⽤户读写指定数据库
      dbAdmin:允许⽤户在指定数据库中执⾏管理函数,如索引创建、删除,查看统计或访问system.profile
      userAdmin:允许⽤户向system.users集合写⼊,可以找指定数据库⾥创建、删除和管理⽤户
      clusterAdmin:只在admin数据库中可⽤,赋予⽤户所有分⽚和复制集相关函数的管理权限
      readAnyDatabase:只在admin数据库中可⽤,赋予⽤户所有数据库的读权限
      readWriteAnyDatabase:只在admin数据库中可⽤,赋予⽤户所有数据库的读写权限
      userAdminAnyDatabase:只在admin数据库中可⽤,赋予⽤户所有数据库的userAdmin权限
      dbAdminAnyDatabase:只在admin数据库中可⽤,赋予⽤户所有数据库的dbAdmin权限
      root:只在admin数据库中可⽤。超级账号,超级权限
      dbOwner:库拥有者权限,即readWritedbAdminuserAdmin⻆⾊的合体
    具体角色内容可参考官网
Built-In Roles — MongoDB Manual中对内置角色进行的详细的说明,同时对不同角色也进行了分类,如下:

      

     对于用于自定义角色可以参考官网User-Defined Roles — MongoDB Manual进行操作。MongoDB提供了用户自定义角色的接口,如db.createRole()等,具体方法参见mongosh Methods — MongoDB Manual

 

 

    

 

 

 

    

  

posted on 2022-03-24 13:11  池塘里洗澡的鸭子  阅读(250)  评论(0编辑  收藏  举报