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 中添加auth=true 参数)

    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。