實現自定義使用者許可權
最近接手運維公司的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更有可能執行廣播操作...