MongoDB:資料庫角色許可權
阿新 • • 發佈:2020-12-20
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"]
}
);
查詢某個資料庫下的使用者:
db.system.users.find()
刪除指定使用者:
db.dropUser(“使用者名稱”);
使用者管理員和資料庫管理員區別:
- 使用者管理員具有在admin和其他資料庫建立使用者賬戶的功能
- 資料庫管理員賬戶用來管理資料庫、叢集、複製和MongoDB的其他方面