MongoDB自定義使用者許可權

2021-08-29 01:29:29 字數 3508 閱讀 7266

實現自定義使用者許可權

最近接手運維公司的mongo資料庫,雖然之前對mongo有一點點的使用,但真正能夠cover公司的mongo,還是有一定的挑戰,平時也是邊學習邊運維。前一陣子對於mongo做了兩件事,第乙個是實現乙個冷備系統,第二個是對mongo許可權的收斂,本章主要介紹一下mongo許可權(mongo版本3.2),以及如何實現自定義的使用者許可權。

mongodb使用者許可權分為內建許可權和自定義許可權,一般我們使用的read、readwrite、root等,都是系統內建的許可權;mongo的使用者許可權,主要由角色名、適用範圍、行為集合構成;下面簡單介紹一下:

型別許可權

適用庫官方簡單說明

database user roles

read

-當前庫的唯讀許可權,不包括system集合

database user roles

readwrite

-讀許可權之上,加入了modify data的許可權,不包括system集合

database admin roles

dbadmin

-允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計,但不會有使用者和許可權管理的功能

database admin roles

dbowner

-在庫中可以做任何操作,包括readwrite,dbadmin,useradmin

database admin roles

useradmin

-可以給當前庫新增使用者和許可權

cluster admin roles

clusteradmin

admin

最大的集群管理許可權,包括clustermanager、clustermonitor、hostmanager許可權以及刪除庫的許可權

cluster admin roles

clustermanager

admin

提供管理和監控集群的許可權,包括config、local庫

cluster admin roles

clustermonitor

admin

提供唯讀情況下使用集群監控工具的許可權

cluster admin roles

hostmanager

admin

監控和管理servers

all database roles

readanydatabase

admin

可以讀所有的庫,除了local庫和config庫,也包括了listdatabases命令;3.4之後的版本允許訪問local庫和config庫

all database roles

readwriteanydatabase

admin

同上,不同的是許可權是readwrite

all database roles

useradminanydatabase

admin

同上,不同的是許可權是useradmin

super roles

root

admin

超級使用者,土皇帝,結合了all database roles型別的所有許可權,以及clusteradmin、restore、backup許可權

命令: db.createrole()

範圍:在admin庫建立的role,可以被其他db使用

語法:

, actions: [ "", ... ] },

...],

roles: [

| "",

...],

authenticationrestrictions: [

,...

],writeconcern: }

createrole : 角色名,string

privileges :特權,array,每個元素包括如下:

action

說明find

insert

remove

update

createcollection

createindex

createrole

createuser

dropcollection

droprole

dropuser

grantrole

viewrole

檢視角色

viewuser

dropdatabase

dropindex

renamecollectionsamedb

將已存在的、非固定的集合轉變成固定集合

其他許可權請自行檢視官方文件

首先,我們登入自己的mongo資料庫,進入需要收斂的資料庫,我這邊有乙個使用者,許可權是readwrite;

football:primary> show users

]}

現在建立自己的許可權,我們保留"insert",「update」,"remove"這三個寫操作,以及繼承讀角色,這樣我們就生成了自己的readwrite,適用範圍當然是使用者所在的庫;

football:primary> db.createrole(, actions: ["insert","update","remove" ] }],roles:[  ]})

, "actions" : [

"insert",

"update",

"remove"

]} ],

"roles" : [

]}

現在我們開始替換許可權;

football:primary> db.grantrolestouser("testone",)

football:primary> db.revokerolesfromuser("testone",)

football:primary> show users

]}

驗證一下,寫入是沒問題滴,但是刪除集合等操作已經不允許了;

football:primary> db.klose.insert()

writeresult()

football:primary> db.klose.find()

football:primary> db.klose.drop()

2018-10-13t23:43:07.569+0800 e query [thread1] error: drop failed: ",

"code" : 13

} :_geterrorwithcode@src/mongo/shell/utils.js:25:13

dbcollection.prototype.drop@src/mongo/shell/collection.js:739:1

@(shell):1:1

用pymongo驗證了一下,當授權被替換掉後,程式中連線mongo的session會立刻生效,無需重啟服務; 當然了,許可權被收斂後,表和索引的操作,運維這邊會多起來,所以就需要乙個mongo的運維平台來支撐,這個正在醞釀中…

Django使用者自定義許可權

可以擴充套件使用者模型,也可在其他業務模型上增加meta定義許可權。class profile1 models.model user models.onetoonefield user depart models.foreignkey depart,verbose name u 部門名稱 isall...

ChatterBot自定義MongoDB路徑

預設資料庫為slite3,已經不能滿足需求,需改為mongodb class bot def init self self.my bot chatbot mode storage adapter chatterbot.storage.mongodatabaseadapter filters chat...

mongodb自定義字段 MongoDB雜湊分片

雜湊分片使用雜湊索引來在分片集群中對資料進行劃分。雜湊索引計算某乙個欄位的雜湊值作為索引值,這個值被用作片鍵。雜湊分片以減少定向操作和增加廣播操作作為代價,分片集群內的資料分布更加均衡。在雜湊之後,擁有比較 接近 的片鍵的文件將不太可能會分布在相同的資料庫或者分片上。mongos更有可能執行廣播操作...