Mit parametrisierten sicheren Ansichten in AlloyDB for PostgreSQL können Sie den Zugriff von Anwendungsnutzern auf bestimmte Datenbankzeilen anhand von benannten Parametern einschränken. In dieser Anleitung erstellen und fragen Sie eine parametrisierte sichere Ansicht mit AlloyDB Studio oder psql ab.
Die Beispiele in dieser Anleitung dienen nur zur Veranschaulichung der Funktionen von parametrisierten sicheren Ansichten.
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
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
Abrechnung und erforderliche APIs aktivieren
Wählen Sie in der Google Cloud Console ein Projekt aus.
Die Abrechnung für Ihr Google Cloud Projekt muss aktiviert sein.
Aktivieren Sie die Cloud APIs, die zum Erstellen von AlloyDB und zum Herstellen einer Verbindung zu AlloyDB erforderlich sind.
- Klicken Sie im Schritt Confirm project (Projekt bestätigen) auf Next (Weiter), um den Namen des Projekts zu bestätigen, an dem Sie Änderungen vornehmen möchten.
Klicken Sie im Schritt APIs aktivieren auf Aktivieren, um Folgendes zu aktivieren:
- AlloyDB API
Erstellen und Verbindung zu einer Datenbank herstellen
Umgebung vorbereiten
Wenn Sie Abfragen für eine parametrisierte sichere Ansicht ausführen möchten, müssen Sie zuerst parametrisierte Ansichten, die Datenbank und Datenbankrollen, die Erweiterung parameterized_views und das Anwendungsschema einrichten.
Erforderliche Erweiterung aktivieren
Aktivieren Sie das Datenbank-Flag parameterized_views.enabled, mit dem die erforderlichen Erweiterungsbibliotheken geladen werden. Weitere Informationen finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
Datenbank einrichten
Erstellen Sie eine Datenbank mit dem Namen database für die Anwendungsdaten und parametrisierten Ansichten. Weitere Informationen zum Erstellen einer Datenbank finden Sie unter Datenbank erstellen.
Datenbankrollen, die Erweiterung und das Anwendungsschema erstellen
Wenn Sie sich als
postgres-Nutzer oder als Nutzer mit AlloyDB-Superuser-Berechtigungen mit der Datenbank verbinden möchten, verwenden Sie AlloyDB Studio oderpsql.psql database -U postgresWeitere Informationen finden Sie unter Datenbanknutzerverwaltung in AlloyDB.
Erstellen Sie die Erweiterung
parameterized_viewsin der Datenbank.-- 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-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-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.
CREATE ROLE psv_user WITH LOGIN PASSWORD '...';Weitere Informationen zum Erstellen von PostgreSQL-Nutzern finden Sie unter
CREATE USER.Stellen Sie eine Verbindung als Nutzer mit Administratorzugriff her.
SET role TO admin_user;Erstellen Sie das Schema, 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:
Wenn Sie als
admin_usereine Verbindung zur Datenbank herstellen möchten, verwenden Sie AlloyDB Studio oderpsql.psql database -U admin_userWenn Sie den Zugriff auf die Ansicht einschränken möchten, erstellen Sie eine parametrisierte sichere Ansicht:
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;Gewähren Sie Zugriff auf das Schema, um auf die Ansicht zuzugreifen.
GRANT USAGE ON SCHEMA schema TO psv_user;Widerrufen Sie den direkten Zugriff auf die Basistabelle.
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-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.
psql database -U psv_userPrüfen Sie, ob auf die Basistabelle zugegriffen werden kann:
SELECT * FROM schema.checked_items;Die Ausgabe sieht etwa so aus:
ERROR: permission denied for table checked_itemsGreifen Sie mit der Funktion
execute_parameterized_queryauf die parametrisierte sichere Ansicht zu:SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from schema.secure_checked_items', param_names => ARRAY ['app_end_userid'], param_values => ARRAY ['303'] );Wenn Sie die Sicherheit für Abfragen verbessern möchten, die mit natürlicher Sprache generiert wurden, können Sie Ihre parametrisierten sicheren Ansichten mit AlloyDB AI Natural Language einbinden.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Wenn Sie Ihren Cluster behalten und nur die Datenbankobjekte entfernen möchten, die Sie in dieser Anleitung erstellt haben, führen Sie die folgenden Befehle aus:
Verwenden Sie AlloyDB Studio oder
psql, um eine Verbindung zur Datenbank alspostgresherzustellen:psql database -U postgresLöschen Sie die von Ihnen erstellten Objekte:
DROP VIEW schema.secure_checked_items; DROP TABLE schema.checked_items; DROP SCHEMA schema; DROP ROLE psv_user; DROP ROLE admin_user; DROP EXTENSION parameterized_views;
So löschen Sie den gesamten AlloyDB-Cluster und das VPC-Netzwerk:
Rufen Sie in der Google Cloud Console die Seite Cluster auf.
Klicken Sie in der Spalte Ressourcenname auf den Namen Ihres Clusters,
my-cluster.Klicken Sie auf delete Cluster löschen.
Geben Sie unter Cluster „my-cluster“ löschen
my-clusterein, um zu bestätigen, dass Sie den Cluster löschen möchten.Klicken Sie auf Löschen.
Wenn Sie beim Erstellen eines Clusters eine private Verbindung erstellt haben, rufen Sie in der Google Cloud Console die Seite „Netzwerk“ auf und klicken Sie auf VPC-Netzwerk löschen.