1. 程式人生 > 其它 >MongoDB安全認證之使用者、角色相關操作

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