MongoDB創建一個用戶自定義角色
前提條件
在數據庫中創建一個角色,你必須有:
1.在該數據庫資源上的createRole行爲。
2.在該數據庫上grantRole行爲給新角色指定權限以及指定繼承的角色。
內嵌角色userAdmin和userAdminAnyDatabase提供了它們各自資源的createRole和grantRole行爲。
創建一個角色管理當前操作
下面的示例創建了角色manageOpRole,只提供了運行db.currentOp()和db.killOp()的權限。
1. 使用適當的權限連接到MongoDB。
使用在前提條件部分指定的權限,連接到mongod或mongos。
下面的過程創建了一個用戶管理員siteUserAdmin:
use admin db.createUser( { user: "siteUserAdmin", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
登錄到MongoDB:
mongo --port 27017 -u siteUserAdmin -p password --authenticationDatabase admin
siteUserAdmin擁有在admin以及其他數據庫創建角色的權限。
2. 創建一個新的角色管理當前操作。
manageOpRole有權限在多個數據庫以及cluster資源操作。因此,你必須在admin數據庫創建角色。
use admin db.createRole( { role: "manageOpRole", privileges: [ { resource: { cluster: true }, actions: [ "killop", "inprog" ] }, { resource: { db: "", collection: "" }, actions: [ "killCursors" ] } ], roles: [] } )
新角色被授權能殺掉任何操作。
警告:
終止運行中的操作要極其小心。只使用db.killOp()來終止客戶端發起的操作而不會終止內部數據庫操作
。
內嵌的角色ClusterMonitor也提供了權限運行db.currentOp()及其他權限,內嵌的角色hostManager提供了權限運行db.killOp()以及其他權限。
創建一個角色運行mongostat
下面的示例創建一個角色mongostatRole提供了只有運行mongostat的權限。
1. 使用適當的權限連接到MongoDB。
使用在前提條件部分指定的權限,連接到mongod或mongos。
下面的過程創建了一個用戶管理員siteUserAdmin:
use admin db.createUser( { user: "siteUserAdmin", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
登錄到MongoDB:
mongo --port 27017 -u siteUserAdmin -p password --authenticationDatabase admin
siteUserAdmin擁有在admin以及其他數據庫創建角色的權限。
2.創建一個新的角色來管理當前操作。
mongostatRole有權限在cluster資源操作。因此,你必須在admin數據庫創建角色。
use admin db.createRole( { role: "mongostatRole", privileges: [ { resource: { cluster: true }, actions: [ "serverStatus" ] } ], roles: [] } )
內嵌的角色clusterMonitor也提供了權限運行mongostat以及其他權限。
參見:https://docs.mongodb.org/manual/tutorial/manage-users-and-roles/#create-role-to-manage-ops