2016-05-04 8 views
1

Ich habe einen Anwendungsfall für Cassandra, wo ich mehrere Zeilen von Daten speichern muss, die verschiedenen Kunden gehören. Ich bin neu bei Cassandra und muss ein Berechtigungsmodell bereitstellen, bei dem nur ein Kunde gleichzeitig von einer Basisberechtigungsrolle aus zugreifbar ist, aber alle von einer "Supervisor" -Rolle aus zugänglich sein könnten. Im Wesentlichen jedes Mal, wenn eine Anfrage gestellt wird, kann ein Kunde die Daten eines anderen Kunden nicht sehen, außer wenn die Anfrage von einem Vorgesetzten stammt. Wir müssen eine Sicherheit als Designansatz durchsetzen.Cassandra Isolationsmodell

Die Daten könnten wie folgt aussehen:

----------------------------------------- 
| id | customer name | data column1... | 
----------------------------------------- 
| 0 | customer1  | 3    | 
----------------------------------------- 
| 1 | customer2  | 23    | 
----------------------------------------- 
| 2 | customer3  | 33    | 
----------------------------------------- 
| 3 | customer3  | 32    | 
----------------------------------------- 

ist so etwas wie dies mit Cassandra leicht machbar?

+0

zu verwalten hat Helfen Warum nicht zwei Instanzen von Cassandra pro Mieter spinnen? Hardware ist heutzutage billig –

+0

Der Anwendungsfall fragt nach einer einzelnen Datenbank, ich habe früher in Schlüsselbereiche geschaut, aber das schien nicht zu passen. Die Cassandra dbs müssen containerisiert werden (nicht mein Anruf). –

Antwort

1

Die Art, wie Sie dies modelliert haben, ist eine sehr gute Möglichkeit, Multi-Tenant zu machen. So modelliert UserGrid mehrere Mandanten und wird in mehreren großen Anwendungen verwendet.

Paare von Nachteilen up-front zu sein:

  • nicht mit einem „lauten Nachbarn“ Problem und ungleichen Mietern
  • Anwendungscode der Mieter Sicherheit
+0

Kannst du etwas näher darauf eingehen? Dies ist ein Projekt, das als Demo verwendet wird. Es wird nicht in einer Produktionsumgebung verwendet. Die wichtigste Voraussetzung, die ich habe, ist sicherzustellen, dass nur die Daten eines Mandanten gleichzeitig für eine Basisrolle verfügbar sind und dass eine Superuser-Rolle auf alle Mandantendaten zugreifen kann. Ist es möglich, eine Sicherheit wie diese mit Cassandras Werkzeug zu erzwingen? –

+0

In Cassandra ist noch nichts wie Sicherheit auf Zeilenebene eingebaut ... bis jetzt. Es ist etwas, von dem ich denke, dass es kommt. Bis dahin ist es anwendungsbasierte Sicherheit. Der beste Weg, den ich gesehen habe, um dies zu bewältigen, ist, dass die Zugriffsmethoden den Benutzer zugewandten Teilen der Anwendung ausgesetzt sind. Ex getUser (Benutzername, Mandant) ist die einzige Möglichkeit, Benutzerdaten zu erhalten. –