Die Beispiele veranschaulichen die Möglichkeiten von parametrisierten sicheren Ansichten. Sie dienen nur zu Demonstrationszwecken.
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
Datenbank installieren und eine Verbindung herstellen
Umgebung vorbereiten
Bevor Sie Abfragen für eine parametrisierte sichere Ansicht ausführen können, müssen Sie zuerst parametrisierte Ansichten, die Datenbank und Datenbankrollen, die Erweiterung parameterized_view und das Anwendungsschema einrichten.
Bevor Sie parametrisierte sichere Ansichten verwenden können, müssen Sie die folgenden Schritte einmal in
Ihrer Linux-Umgebung ausführen.
Jede Einstellung kann mit ALTER SYSTEM oder durch direktes Bearbeiten von postgresql.conf angewendet werden:
- `parameterized_views` zu
shared_preload_librarieshinzufügen - Funktion aktivieren, indem Sie
parameterized_views.enabled=onfestlegen - Postgres neu starten, damit die Änderungen wirksam werden
Datenbank einrichten
- Eine Datenbank namens
databasefür die Anwendungsdaten und parametrisierten Ansichten erstellen
Datenbankrollen, Erweiterung und Anwendungsschema erstellen
Über psql als Nutzer
postgresoder als Nutzer mit AlloyDB Omni Superuser berechtigungen eine Verbindung zur Datenbank herstellen/usr/lib/postgresql/18/bin/psql -h localhost -U postgresDie Erweiterung
parameterized_viewsin der Datenbank erstellen-- Requires parameterized_views.enabled set to true CREATE EXTENSION parameterized_views;Wenn die Erweiterung erstellt wird, erstellt das System auch ein Schema mit dem Namen
parameterized_views. So sind die APIs im Namespace dieses Schemas enthalten und geraten nicht mit vorhandenen APIs in Konflikt.Erstellen Sie die AlloyDB Omni-Administratorrolle, die als Datenbankinhaber dient und die Datenbank verwaltet.
CREATE ROLE admin_user WITH LOGIN PASSWORD '...'; GRANT ALL PRIVILEGES ON DATABASE database TO admin_user;Weitere Informationen finden Sie unter
CREATE USER.Erstellen Sie eine neue Datenbankrolle zum Ausführen von Abfragen für parametrisierte sichere Ansichten. Dies ist eine AlloyDB Omni-Rolle, die von der Anwendung verwendet wird. Sie dient dazu, eine Verbindung zur Datenbank herzustellen, sich anzumelden und Abfragen mit eingeschränktem Zugriff auf öffentliche Funktionen oder Objekte auszuführen.
Weitere Informationen finden Sie unter
CREATE USER.Stellen Sie eine Verbindung als Nutzer mit Administratorzugriff her.
SET role TO admin_user;Das Schema erstellen, das die Tabellen enthält
CREATE SCHEMA schema;Tabellen erstellen und Daten einfügen
CREATE TABLE schema.checked_items(bag_id INT,timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT); INSERT INTO schema.checked_items (bag_id, timestamp, loc_code, scan_type, location, customer_id) VALUES (101, '2023-10-26 10:00:00', 'ABC', 'I', 'Warehouse A', 123), (102, '2023-10-26 10:15:30', 'DEF', 'O', 'Loading Dock B', 456), (103, '2023-10-26 10:30:45', 'GHI', 'I', 'Conveyor Belt 1', 789), (104, '2023-10-26 11:00:00', 'JKL', 'O', 'Shipping Area C', 101), (105, '2023-10-26 11:45:15', 'MNO', 'I', 'Sorting Station D', 202), (106, '2023-10-26 12:00:00', 'PQR', 'O', 'Truck Bay E', 303);
Sichere parametrisierte Ansichten erstellen und Zugriffsberechtigungen einrichten
So erstellen Sie sichere parametrisierte Ansichten und richten die entsprechenden Zugriffsberechtigungen für die Basistabelle und die Ansichten ein:
Über psql als
admin_usereine Verbindung zur Datenbank herstellen/usr/lib/postgresql/18/bin/psql -h localhost -U admin_userEine parametrisierte sichere Ansicht erstellen, um den Zugriff auf die Ansicht einzuschränken
CREATE VIEW schema.secure_checked_items WITH (security_barrier) AS SELECT bag_id, timestamp, location FROM schema.checked_items t WHERE customer_id = $@app_end_userid;Gewähren Sie Zugriff auf die Ansicht.
GRANT SELECT ON schema.secure_checked_items TO psv_user;Um auf die Ansicht zuzugreifen, Zugriff auf das Schema gewähren
GRANT USAGE ON SCHEMA schema TO psv_user;Direkten Zugriff auf die Basistabelle aufheben
REVOKE ALL PRIVILEGES ON schema.checked_items FROM psv_user;
Datensicherheit prüfen
Führen Sie die folgenden Befehle als psv_user aus, um zu prüfen, ob der Zugriff auf die angegebenen Ansichten durch die parametrisierten sicheren Ansichten eingeschränkt wird. Dies ist eine AlloyDB Omni-Datenbankrolle, die von der Anwendung verwendet wird. Sie dient dazu, eine Verbindung zur Datenbank herzustellen, sich anzumelden und Abfragen auszuführen.
Stellen Sie eine Verbindung als Nutzer mit parametrisierten sicheren Ansichten her.
/usr/lib/postgresql/18/bin/psql -h localhost -U psv_userPrüfen, ob auf die Basistabelle nicht zugegriffen werden kann
SELECT * FROM schema.checked_items; ERROR: permission denied for table checked_itemsMit der Funktion
execute_parameterized_queryauf die parametrisierte sichere Ansicht zugreifenSELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from schema.secure_checked_items', param_names => ARRAY ['app_end_userid'], param_values => ARRAY ['303'] );Um die Sicherheit von Abfragen zu verbessern, die in natürlicher Sprache generiert wurden, parametrisierte sichere Ansichten in natürlicher Sprache einbinden
Bereinigen
Zum Bereinigen können Sie entweder die AlloyDB Omni-Instanz deinstallieren oder die Instanz beibehalten und die einzelnen Objekte löschen.
Nächste Schritte
- Weitere Informationen zu parametrisierten sicheren Ansichten.
- Informationen zum Verwalten der Sicherheit von Anwendungsdaten mit parametrisierten sicheren Ansichten