In dieser Anleitung wird beschrieben, wie Sie parametrisierte sichere Ansichten in Cloud SQL for PostgreSQL verwenden, um den Nutzerzugriff auf parametrisierte Ansichten mit Cloud SQL Studio oder psql einzuschränken.
Ziele
- Sichere parametrisierte Ansichten mit benannten Ansichtsparametern erstellen
- Datenbankrolle erstellen, die von der Anwendung verwendet wird, um eine Verbindung zur Datenbank herzustellen und auf parametrisierte sichere Ansichten zuzugreifen
- Der neuen Rolle Berechtigungen für sichere Ansichten gewähren und den Zugriff auf Basistabellen aufheben
- Verbindung mit der neuen Rolle herstellen und bestätigen, dass auf die eingeschränkten Tabellen nicht zugegriffen werden kann
- Abfragen für die parametrisierte sichere Ansicht mit der Funktion
execute_parameterized_queryausführen
Umgebung vorbereiten
Aktivieren Sie das Datenbankflag
cloudsql.enable_parameterized_viewsfür Ihre Cloud SQL-Instanz. Für diese Flagänderung ist ein Neustart der Datenbank erforderlich.Stellen Sie als Nutzer
postgreseine Verbindung zu Ihrer Datenbank her.psql -U postgresErstellen Sie die Erweiterung
parameterized_viewsin der Datenbank.CREATE EXTENSION parameterized_views;Erstellen Sie eine neue Datenbankrolle zum Ausführen von Abfragen.
CREATE ROLE psv_user WITH LOGIN PASSWORD 'PASSWORD';Erstellen Sie ein Schema und eine Tabelle für die Anwendungsdaten.
CREATE SCHEMA app_schema; CREATE TABLE app_schema.items(item_id INT, item_name TEXT, description TEXT, owner_id INT); INSERT INTO app_schema.items (item_id, item_name, description, owner_id) VALUES (1, 'Book', 'A great read', 123), (2, 'Laptop', 'Work machine', 456), (3, 'Pencil', 'For writing', 123);
Sichere parametrisierte Ansichten erstellen und Zugriffsberechtigungen einrichten
Erstellen Sie eine parametrisierte sichere Ansicht:
CREATE VIEW app_schema.user_items_view WITH (security_barrier) AS SELECT item_id, item_name, description FROM app_schema.items WHERE owner_id = $@current_user_id;Gewähren Sie der Anwendungsrolle Zugriff auf die Ansicht und das Schema.
GRANT USAGE ON SCHEMA app_schema TO psv_user; GRANT SELECT ON app_schema.user_items_view TO psv_user;Heben Sie den direkten Zugriff auf die Basistabelle auf.
REVOKE ALL PRIVILEGES ON app_schema.items FROM psv_user;
Datensicherheit überprüfen
Stellen Sie eine Verbindung als
psv_userher.psql -U psv_user -d postgresPrüfen Sie, ob auf die Basistabelle nicht zugegriffen werden kann.
SELECT * FROM app_schema.items; -- ERROR: permission denied for table itemsGreifen Sie mit der Funktion
execute_parameterized_queryauf die parametrisierte sichere Ansicht zu:SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from app_schema.user_items_view', param_names => ARRAY ['current_user_id'], param_values => ARRAY ['123'] );Das Ergebnis sollte nur Elemente enthalten, bei denen
owner_idgleich123ist.