2016-04-26 12 views
1

Wie haben die Leute einen Ansatz beim Ausführen von Berichten verwendet oder einfach nur mehrere Datensätze aus einer DB ausgewählt?Wie schützen Sie mit ABAC/XACML Ressourcen in Berichten/großen Ergebnismengen?

Zum Beispiel, wenn Sie eine Politik haben, die besagt:

Ärzte nur Patienten in ihrem Krankenhaus sehen können

Offensichtlich ist der effizienteste Weg, dies zu implementieren, ist ein Filter in der Abfrage enthalten (where hospital = XXX), aber dies scheint mit dem Principal von ABAC zu brechen, da es die Regel in das SQL selbst bringt.

Ich weiß, Axiomatics bietet einen Reverse-Abfrage-Mechanismus, der anscheinend Filter für Sie basierend auf Regeln erzeugt - aber mein System hat eine Menge komplexer SQL, die ziemlich umgestaltet werden müsste, um damit zu arbeiten.

Wie haben andere Leute mit diesem Problem umzugehen?

Antwort

1

Es gibt im Wesentlichen drei Möglichkeiten, dies zu adressieren:

  1. über einen Rückwärtsabfragemechanismus, wie Sie angedeutet. Dies wird derzeit nur von Axiomatics unterstützt. Die Idee hinter einer Rückwärtsabfrage ist, dass anstelle einer vollständigen Frage z. "Can Alice view document #123?" können Sie eine offene Frage angeben, z. "Which documents can Alice view?".
  2. Über das Multiple Decision Profile von XACML 3.0, mit dem Sie mehrere Fragen auf einmal stellen können, z. "Kann Alice DoC# 1, # 2, # 3 sehen?". Der MDP ist praktisch für Hunderte von Gegenständen maximal. Sie können es mit einer Paginierungsstrategie kombinieren. Sie können mehr über MDP here lesen.
  3. Über die Verwendung von Verpflichtungen. Sie könnten eine Richtlinie schreiben, die besagt, dass ein Arzt als Ganzes das Recht hat, medizinische Aufzeichnungen zu sehen, sowie die Verpflichtung, eine Filter-SQL-Anweisung auszuführen. Das Problem bei diesem Ansatz besteht darin, dass die Autorisierungssemantik innerhalb der Verpflichtung und nicht innerhalb der Richtlinie platziert wird. Was passiert, wenn mehrere Verpflichtungen ausgelöst werden?
+0

Dank David. Ich habe in der letzten Woche eine Menge deiner Kommentare/Beiträge gelesen und hoffte, dass du das sehen würdest. – jbd

+0

Ich glaube, das ist ein inhärentes Problem mit der Autorisierung im Allgemeinen. Ich betrachte einen Ansatz, bei dem der Abfangpunkt vor dem Ausführen der Abfrage auftritt. Beispiel: Ermitteln Sie, ob Alice Dokumente im Krankenhaus X anzeigen kann. Wenn dies der Fall ist, lassen Sie die Abfrage zu. Im Wesentlichen wird die Abfrage selbst zur Ressource, die das Subjekt ausführen möchte. Irgendwelche Rückmeldungen zu diesem Ansatz? Ich bin mir sicher, dass andere dies getan haben. – jbd

+0

Ich habe der Antwort einen neuen Ansatz hinzugefügt. Sie haben recht, dass es zwei Ebenen der Zugriffskontrolle gibt: die funktionale Kontrolle (Sie haben das Recht, medizinische Aufzeichnungen als Ganzes abzurufen) und die Datenebene eine (Sie können nur Datensätze in Ihrer Abteilung anzeigen) –