Überprüfen definierter Sicherheitsrichtlinien auf Zeilenebene in PostgreSQL-9.5

8

Ich habe das brandneue PostgreSQL-9.5 (alpha) gebaut und bin sehr gespannt auf die neue Funktion von Sicherheit auf Zeilenebene . Dies verspricht, das Zugriffsmanagement für mehrere Rollen ein wenig einfacher zu gestalten.

Als Beispiel habe ich bisher ein Modell verwendet, bei dem eine Rolle NOLOGIN Eigentümer der Datenbank ist und alle Tabellen, Ansichten, Funktionen usw .; und erstellen Sie dann Ansichten, um den entsprechenden Zugriff auf bestimmte Rollen zu gewähren. Alles gut und gut, aber die Ansichten wuchern. Der neue Befehl CREATE POLICY für Tabellen mit ENABLE ROW LEVEL SECURITY scheint eine sauberere Alternative zu sein, um das gleiche Ziel zu erreichen.

Bisher konnte ich jedoch nicht feststellen, welche Tabellen RLS-fähig sind und welche Richtlinien für sie definiert sind. (All dies, nachdem die Tabellen und Richtlinien offensichtlich definiert wurden.) Gibt es eine einfache Möglichkeit, etablierte Richtlinien für RLS-aktivierte Tabellen zu identifizieren?

(Es gibt auch die lang ersehnte UPSERT und viele weitere jsonb Funktionen für diejenigen von euch, die daran interessiert sind, sowie viele Leistungsverbesserungen.)

    
Patrick 07.07.2015, 04:10
quelle

1 Antwort

5

Ok, habe es herausgefunden. (Meine Güte, benutzt noch niemand 9.5?)

Frage 1: Welche Tabellen haben Sicherheit auf Zeilenebene?

Die Beziehung pg_class hat eine neue Spalte relrowsecurity boolean , die so einfach ist, wie sie aussieht:

%Vor%

Frage 2: Welche Richtlinien sind in RLS-aktivierten Tabellen definiert?

Der Systemkatalog hat eine neue Beziehung pg_policy , in der alle Informationen zur Richtlinie gespeichert werden, insbesondere der Name der Richtlinie, der oid der Tabelle, der Befehl, auf den sie angewendet wird, die Rollen ( oid[] ). auf die die Richtlinie angewendet wird und die USING und WITH CHECK -Klauseln.

Interessanterweise werden die letzten beiden als pg_node_tree gespeichert, die mit dem Ausführungsplan der Abfrage, die der Richtlinie unterliegt, zusammengeführt werden, so dass die Bedingung (en) der Richtlinie nicht bei jedem Aufruf neu bewertet werden. Das macht diesen Ansatz möglicherweise schneller als die Verwendung von Sichten, wie in der Frage ausgeführt, weil weniger Klauseln für jeden Aufruf analysiert und ausgewertet werden müssen.

    
Patrick 07.07.2015, 08:29
quelle

Tags und Links