2016-12-16 6 views
2

Ich suche, wie so etwas zu bekommen:Abfrage für für jede Sammlung Rolle Privilegien erhalten mongoDB

{ _id: "myApp.appUser", 
    role: "appUser", 
    db: "myApp", 
    privileges: [ 
     { resource: { db: "myApp" , collection: "" }, 
     actions: [ "find", "createCollection", "dbStats", "collStats" ] }, 
     { resource: { db: "myApp", collection: "logs" }, 
     actions: [ "insert" ] }, 
     { resource: { db: "myApp", collection: "data" }, 
     actions: [ "insert", "update", "remove", "compact" ] }, 
     { resource: { db: "myApp", collection: "system.js" }, 
     actions: [ "find" ] }, 
    ], 
    roles: [] 
} 

Diese JSON gehört Dokumentation MongoDB (https://docs.mongodb.com/v3.2/reference/system-roles-collection/#examples).

Aber ich habe die Abfrage nicht gefunden, um dies zu erhalten.

Ich weiß, dass ich tun kann:

db.getSiblingDB('databaseName').getRole('rolename', { showPrivileges: true }) 

Aber ich will das nicht, weil ich alle Privilegien (Aktionen) müssen in der gleichen Zeile.

Kann mir jemand helfen?

Danke !!

Antwort

0

Ein paar Ansätze, die Sie zum Abfragen des Datasets verwenden können. Erstens können Sie den folgenden rolesInfo Befehl ausführen, die sowohl die Rolle Vererbung und die Berechtigungen für die Rolle zurückgibt appUser auf die myApp Datenbank definiert:

db.runCommand(
    { 
     "rolesInfo": { 
      "role": "appUser", 
      "db": "myApp" 
     }, 
     "showPrivileges": true 
    } 
) 

Der andere Ansatz wäre, die system.roles Sammlung abfragen in der Admin-Datenbank als:

use admin 
db.getCollection('system.roles').find({ "role": "appUser" }) 
+0

Vielen Dank für die Antwort. Das Ergebnis ist jedoch sehr ähnlich JSON, die ich mit der ersten Abfrage erhalten habe. Ich nehme an, dass ich die Textdatei mit dem JSON mit Bash-Shell verarbeiten muss. So verstehe ich, dass es keine Möglichkeit gibt, Aktionen für jede Sammlung in derselben Zeile zu erhalten? Danke !! – Nacho

+0

Wolltest du sagen "existiere"? Die obigen Abfragen geben leicht unterschiedliche JSON-Ergebnisse, aber alle haben die Privilegien und ich dachte, dies beantwortet deine Frage, da du gesagt hast: "Aber ich will das nicht, weil ich alle Privilegien (Aktionen) in derselben Zeile benötige." – chridam

+0

Abgesehen von der gleiche Linie, jetzt ist es nicht wichtig. Der Hauptpunkt besteht darin, die Antwort nach der Sammlung zu filtern. In sql wäre es "select .... where collection =" ". – Nacho

Verwandte Themen