MongoDB安全認證之使用者、角色相關操作
MongoDB 預設是沒有賬號的,可以直接連線,⽆須身份驗證。這就導致任何使用者只要可能進入MongoDB資料庫就可以對該資料庫進行任意操作——在實際項⽬中這樣的後果不堪設想,肯定是要許可權驗證的。
官網Security — 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:庫擁有者許可權,即readWrite、 dbAdmin、 userAdmin⻆⾊的合體
具體角色內容可參考官網Built-In Roles — MongoDB Manual中對內建角色進行的詳細的說明,同時對不同角色也進行了分類,如下:
對於用於自定義角色可以參考官網User-Defined Roles — MongoDB Manual進行操作。MongoDB提供了使用者自定義角色的介面,如db.createRole()
等,具體方法參見mongosh Methods — MongoDB Manual。