天天看點

MongoDB:資料庫角色權限1. 了解Admin資料庫2. 角色與權限3. 建立角色

MongoDB:資料庫角色權限1. 了解Admin資料庫2. 角色與權限3. 建立角色

1. 了解Admin資料庫

新安裝的MongoDB是沒有賬号設定,不用安全驗證,任何人隻要連接配接上服務就可以進行CRUD操作,這是非常不安全的。

是以我們需要對MongoDB進行設定賬号,來控制對資料庫的通路。

mongodb沒有預設管理者賬号,先添加管理者賬号,再開啟權限認證

切換到admin資料庫,添加的賬号才是管理者賬号

管理者可以管理所有資料庫,但要先在admin資料庫認證後才可以管理其他資料庫

MongoDB預設有一個admin資料庫,admin.system.users中将會儲存比在其它資料庫中設定的使用者權限更大的使用者資訊

當admin.system.users中一個使用者都沒有時,即使mongod啟動時添加了- -auth參數,如果沒有在admin資料庫中添加使用者,此時不進行任何認證還是可以做任何操作,直到在admin.system.users中添加了一個使用者

2. 角色與權限

Mongodb的授權采用了角色授權的方法,每個角色包括一組權限

Mongodb已經定義好了的角色叫内建角色,我們也可以自定義角色

MongoDB角色有:

  • 資料庫使用者角色:read、readWrite;
  • 資料庫管理角色:dbAdmin、dbOwner、userAdmin;
  • 叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  • 備份恢複角色:backup、restore;
  • 所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  • 超級使用者角色:root;
  • 内部角色:__system;

MongoDB權限:

  • read: 允許使用者讀取指定資料庫
  • readWrite: 允許使用者讀寫指定資料庫
  • dbAdmin:允許使用者在指定資料庫中執行管理函數,如索引建立、删除,檢視統計或通路system.profile
  • userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、删除和管理使用者
  • clusterAdmin:隻在admin資料庫中可用,具有所有分片和複制集相關函數的管理權限。
  • readAnyDatabase:隻在admin資料庫中可用,具有所有資料庫的讀權限
  • readWriteAnyDatabase:隻在admin資料庫中可用,具有所有資料庫的讀寫權限
  • userAdminAnyDatabase:隻在admin資料庫中可用,具有所有資料庫的userAdmin權限
  • dbAdminAnyDatabase:隻在admin資料庫中可用,具有所有資料庫的dbAdmin權限。
  • root:隻在admin資料庫中可用。超級賬号,超級權限

3. 建立角色

建立普通使用者:

>use  foobar
>db.createUser(
  { user:"foobarUser",
    pwd:"foo",
    roles:[{role:"readWrite",db:”foobar”}],
  }
  )
           

建立使用者管理者:

>use  admin
>db.createUser(
  { user:"Useradmin",
    pwd:"Userpwd",
    roles:["userAdminAnyDatabase"],
  }
  )
           

建立資料庫管理者:

use  admin
db.createUser(
  { user:"DbUser",
    pwd:"DbPwd“,roles:["readWriteAnyDatabase", "dbAdminAnyDatabase"]
  }
  );
           

查詢某個資料庫下的使用者:

删除指定使用者:

使用者管理者和資料庫管理者差別:

  • 使用者管理者具有在admin和其他資料庫建立使用者賬戶的功能
  • 資料庫管理者賬戶用來管理資料庫、叢集、複制和MongoDB的其他方面