(2018-01-25 15:52:29)html
轉載▼mongodb
標籤: mongodbshard最小權限shardcollectionprivileges |
分類: 數據庫 |
操做需求是爲程序用戶提供一個最小權限,知足如下操做需求:數據庫
經過這樣限制,最多隻會影響到指定的數據庫,
避免由於程序問題或者其餘外部因素致使數據處理邏輯出問題而影響到整個集羣。ide
以myDb.myCollection
爲例,對collection開啓shard,須要進行如下操做:測試
若是數據庫沒有開啓分片功能,須要先開啓:ui
sh.enableSharding("myDb")
若是collection裏面已經有數據,須要先建立對應的shardkey索引:this
use myDb db.myCollection.createIndex( {"shard_key_field": "hashed"} )
對指定collection開啓shard:spa
sh.shardCollection("myDb.myCollection", {"shard_key_field": "hashed"})
因此須要相應的權限來運行以上3個操做命令。
參考官網文檔描述,須要給用戶提供兩個權限:code
https://docs.mongodb.com/manual/reference/privilege-actions/#enableShardinghtm
enableSharding
User can enable sharding on a database using theenableSharding
command and can shard a collection using theshardCollection
command. Apply this action to database or collection resources.
https://docs.mongodb.com/manual/reference/privilege-actions/#createIndex
createIndex
Provides access to thedb.collection.createIndex()
method and thecreateIndexes
command. Apply this action to database or collection resources.
由於原來項目用戶關於業務數據庫的角色就已是dbOwner
,
所以,再建立一個具備開啓shard相關操做權限的角色,授予項目數據庫用戶便可實現最小權限控制。
首先建立新的角色,提供上述的兩個操做權限。
這裏命名爲opShardRole
,能夠根據實際需求更改:
use myDb; db.createRole({ role: "opShardRole", privileges:[ { resource:{db:"myDb", collection:""}, actions:["enableSharding, "createIndex"] } ], roles:[] } )
而後將opShardRole
角色grant給項目用戶,這裏假設用戶名爲project_user
:
db.grantRolesToUser("project_user",[{role:"opShardRole", db:"myDb"}])
至此,操做完成,能夠經過項目用戶進行測試開啓shard相關操做有無問題。
切換到業務db,並檢查相關的用戶及角色:
查看角色相關操做權限:
mongos> db.getRole("opShardRole",{showPrivileges: true}) { "role" : "opShardRole", "db" : "myDb", "isBuiltin" : false, "roles" : [ ], "inheritedRoles" : [ ], "privileges" : [ { "resource" : { "db" : "myDb", "collection" : "" }, "actions" : [ "createIndex", "enableSharding", "shardCollection" ] } ], ... }
查看用戶關聯的角色:
mongos> show users; { "_id" : "myDb.project_user", "user" : "project_user", "db" : "myDb", "roles" : [ { "role" : "opShardRole", "db" : "myDb" }, { "role" : "dbOwner", "db" : "myDb" } ] }
能夠看到,opShardRole
這個角色確實已經有了對業務數據庫myDb
的所需shard操做權限,
同時,project_user
這個用戶也已經有了opShardRole
角色受權。
分享: