Zugriffsregeln im Export

Ein Postgres-Export enthält Row-Level-Security-Policies, die nachbilden, welche Zeilen jeder Ihrer Nutzer lesen kann. Sie wenden sie selbst an, und sie decken nur das Lesen ab.

Was die Policies nachbilden

Das Export-Bundle enthält policies.sql, das Row-Level-Security auf den exportierten Tabellen einrichtet. Ein Nutzer sieht eine Zeile, wenn sie ihm gehört, wenn sie öffentlich ist, wenn sie ihm ausdrücklich gewährt wurde oder wenn sie an etwas hängt, das er bereits sehen kann. Dieser letzte Fall reicht eine Ebene weit, über eine Referenz, die Lesezugriff trägt. Ausdrückliche Gewährungen liegen in einer eigenen Tabelle, die die Policies abfragen und die Nutzer nicht direkt lesen können.

In Fóir werden die Regeln in der Datenbank durchgesetzt, von Demesne gegen eine einzige Datensatztabelle kompiliert. Der Export hat eine Tabelle pro Modell, daher werden dieselben Regeln für diese Form neu geschrieben.

Anwenden

Sie führen die Datei mit psql aus, nachdem die Daten geladen sind. Das Anwenden des Bundles über den Export-Befehl führt sie nicht aus. Von da an besteht der Vertrag aus einer Sitzungseinstellung, request.jwt.claims, die die ID des Nutzers trägt. Sind keine Claims gesetzt, ist der Aufrufer anonym und sieht genau die öffentlichen Zeilen. Testen Sie als Rolle authenticated Rolle, denn die Rolle, die die Tabellen wiederhergestellt hat, besitzt sie, und der Eigentümer einer Tabelle umgeht Row-Level-Security.

Was nicht übertragen wird

Berechtigungen auf Feldebene, API-Scopes und Schreibregeln bleiben zurück. Ein Nutzer, der in der wiederhergestellten Datenbank eine Zeile sehen kann, sieht jede ihrer Spalten, das Verbergen eines Felds wird also zur Aufgabe Ihrer Anwendung, einer Spaltenberechtigung oder einer View. Die Policies geben anonymen und angemeldeten Aufrufern nur Lesezugriff, und der Konsolenzugriff Ihres Teams wird nicht exportiert.

Was getestet wird

Unsere Testsuite exportiert ein befülltes Projekt, stellt es in einer zweiten Datenbank wieder her, wendet die Policies an und verlangt für denselben Nutzer auf beiden Seiten dieselben Zeilen-IDs. Das testet die Übersetzung, und nichts prüft die Policies in Ihrer eigenen wiederhergestellten Datenbank. Dass die wiederhergestellten Regeln übereinstimmen, behaupten wir nicht für ein Projekt mit Organisationen.

Details nachlesen

Der Abschnitt zu Zugriffsregeln in der Export-Anleitung zeigt, wie Sie die Policies anwenden, die Claims eines Nutzers setzen und mit der richtigen Rolle testen.