文章目錄
建立 MongoDB 自訂角色 (role)
最近在為系統的 storage 服務加上 data archival 流程,其中 MongoDB 的做法跟一般流程不同,雖然 MongoDB 有許多內建的角色權限 (Built-In Roles),但沒找到適合的,我的需求是:
- 需要可以跨 database 備份資料、建立 database、建立 collection、搜尋
- 不能有破壞性操作 (dropCollection ….etc)
所以就興起使用 MongoDB User-Defined Roles 的念頭
因為我對於 MongoDB 的使用上一直以來都不是很得應手,所以趁著還有印象,簡單紀錄一下 避免日後又想不起
基本環境說明
- macOS Catalina 10.15.6
- docker desktop community 2.3.0.4(46911)
- mongodb 4.2.8
- MongoDB Replica Set 建立請參考之前筆記 使用 Docker Compose 建立有 Auth 的 MongoDB Replica Set
設定方式
MongoDB 的 role 權限系統的設定邏輯是在指定 resources
(Database , Collection or Cluster Resources) (參考資料:Resource Document) 上加上想要需要的 actions
(參考資料:Privilege Actions) 來達成的,除此之外也可以透過繼承其他 role 來給予權限
先切換至
admin
databaseuse admin
使用
dbAdmin
角色 user 進行認證語法
db.auth('{username}','{password}')
範例
db.auth('root','pass.123')
建立 User-Defined Role
語法
db.createRole( { role: "{role name}", privileges: [ { resource: { db: "{target db name}", collection: "{target collection name}" }, actions: ["{action name}"] } ], roles: [ { role: "{parent role name}", db: "{parent db name}" } ] }, { w: "majority" , wtimeout: 5000 } )
範例
db.createRole( { role: "AchivalUser", privileges: [ { resource: { db: "", collection: "" }, actions: [ "find","createIndex","createUser","insert" ] } ], roles: [ { role: "backup", db: "admin" } ] }, { w: "majority" , wtimeout: 5000 } )
說明
- 建立一個名為
AchivalUser
的 User-Defined Role - 對所有 database 與 collection 給于
find
,createIndex
,createUser
,insert
權限 - 繼承
admin
中的backup
role 權限 - 需要同時得到
1
primary 與1
secondary 的回應(replica set 下majority
的定義),回應 timeout 為5000
- 建立一個名為
最終權限
- find
- createIndex
- createUser
- insert
create
create collection or view
listDatabases
from
backup
rolelistCollections
from
backup
rolelistIndexes
from
backup
role
使用 User-Defined Role 建立 user
語法
db.createUser({user: "{username}" , pwd: "{password}", roles: [ "{role name}" ]})
範例
db.createUser({user: "archival" , pwd: "pass.123", roles: [ "AchivalUser" ]})
心得
每次處理 MongoDB 相關功能或是設定時,都有差不多的感覺:執行前很困難、資料不好找、文件語意不清;執行後異常簡單,不需要紀錄XD
這次也一樣,之前看相關需求時可謂是完全沒有頭緒,但真的測試搞懂後,連文件好像都覺得寫得很平易近人 @@” 我覺得應該是還沒有真正以 MongoDB 的思維模式來看的關係,但沒關係還是又過了一關
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。