2016-11-19 5 views
2

Meine DocumentDb App hat so ziemlich eine mandantenfähige Architektur. Ich wollte gleich zu Beginn einen Partitionsschlüssel verwenden, um sicherzustellen, dass das Ganze nicht neu gestaltet werden muss, wenn es populär wird. Die aktuelle Architektur erfordert eine einzige heterogene Sammlung. Eine Sammlung pro Tenant-Architektur wird nicht funktionieren.DocumentDB Benutzerberechtigungen - nach Partitionsschlüssel?

Alle Zugriffe würden die Mieter-ID enthalten, um ein Auslaufen zu verhindern. Darum geht es mir nicht.

Ich brauche clientseitige Lesezugriff, so dass ich geplant hatte, dass mein Server Ressourcen Tokens basierend auf Berechtigungen für jeden Benutzer ausgeben.

Aber ich habe in der Dokumentation festgestellt, dass Sie nur eine Berechtigung pro Benutzer pro Ressource haben können. Ich möchte keine Berechtigungen für jedes Dokument erstellen. Grundsätzlich möchte ich eine Berechtigung für jeden Partitionsschlüssel. Auf diese Weise wird die Tenant-ID zum einschränkenden Faktor bei clientseitigen Lesevorgängen.

Grundsätzlich hat das Clientgerät nur Lesezugriff auf alle Dokumente in der Sammlung, die seinen Partitionsschlüssel teilen.

Sollte das Ressourcentoken kompromittiert sein, dauert es nur eine Stunde und es würde niemandem Zugriff auf die gesamte Sammlung geben, nur die Daten dieses Mandanten.

Kann ich einen einzelnen DocumentDb-Datenbankbenutzer mit mehreren schreibgeschützten Berechtigungen für dieselbe Sammlung haben, wenn jede Berechtigung einen anderen Partitionsschlüssel hat?

TIA

Antwort

0

Schließlich schrieb nur eine Reihe von Tests, um zu sehen, ob ich zwei Berechtigungen erstellen könnte, die jeweils mit einem anderen Namen und anderen Partition Schlüssel, aber für den gleichen Benutzer und die gleiche Leseberechtigung auf der gleichen Sammlung. No Go. Die zweite ergab ein Conflict-Ergebnis.

Versuchen Sie also, die Daten eines Mandanten zu schützen, indem Sie nur Ressourcen-Tokens für ihre Partition in einer einzelnen Sammlung ausgeben.

:(

Die einzige Alternative wäre, zwei verschiedene Sammlungen zu erstellen, Daten zu duplizieren, wenn notwendig. An diesem Punkt bin ich nicht sicher, wie paranoid ich bin, oder sollte es sein, um die Sicherheit.

ich werde sie alle durch ein Backend stochern und laufen niemand Schlüssel bekommt

2

es unterstützt mehrere Berechtigungen pro Ressource (für jede Partition Schlüssel) Hier ein Beispiel zu erstellen:...

User user = await client.CreateUserAsync(UriFactory.CreateDatabaseUri("SampleDatabase"), new User { Id = "NewUser" }); 
Permission permission = await client.CreatePermissionAsync(
    user.SelfLink, 
    new Permission 
    { 
     Id = "ReadA", 
     PermissionMode = PermissionMode.Read, 
     ResourcePartitionKey = new PartitionKey("Andersen"), 
     ResourceLink = collection.SelfLink 
    }); 

Permission permission2 = await client.CreatePermissionAsync(
    user.SelfLink, 
    new Permission 
    { 
     Id = "ReadW", 
     PermissionMode = PermissionMode.Read, 
     ResourcePartitionKey = new PartitionKey("Wakefield"), 
     ResourceLink = collection.SelfLink 
    }); 

Die Berechtigungen gelten für alle Dokumente mit demselben Partitionsschlüssel. Also, wenn Sie mit Berechtigungen ein Dokument mit dem Partitionsschlüssel zuzugreifen, kehrt DocumentDB das Dokument erfolgreich, aber mit einer anderen Partition Schlüssel, DocumentDB gibt einen Berechtigungsfehler:

DocumentClient restrictedClient1 = new DocumentClient(
    new Uri("https://FILLME:443/"), 
    permission.Token); 

// Succeeds 
await restrictedClient1.ReadDocumentAsync(
    UriFactory.CreateDocumentUri("SampleDatabase", "SampleCollection", "AndersenFamily"), 
    new RequestOptions { PartitionKey = new PartitionKey("Andersen") }); 

// Fails 
await restrictedClient1.ReadDocumentAsync(
    UriFactory.CreateDocumentUri("SampleDatabase", "SampleCollection", "WakefieldFamily"), 
    new RequestOptions { PartitionKey = new PartitionKey("Wakefield") }); 
+0

Randnotiz - können Sie bitte bitte einen Link zu der Dokumentation hinzufügen das sagt das? Dies sollte vom DocumentDB-Team korrigiert werden. –

Verwandte Themen