In dieser Anleitung wird beschrieben, wie Sie parametrisierte sichere Ansichten in AlloyDB for PostgreSQL verwenden, um den Nutzerzugriff auf parametrisierte Ansichten mit AlloyDB Studio oder psql einzuschränken.
Es sind Beispiele enthalten, um die Funktionen von parametrisierten sicheren Ansichten zu veranschaulichen. Diese Beispiele dienen nur zu Demonstrationszwecken.
Vorbereitung
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 einer Verbindung zu AlloyDB for PostgreSQL erforderlich sind.
- Klicken Sie im Schritt Projekt bestätigen auf 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
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.
Erforderliche Erweiterung aktivieren
Aktivieren Sie das Datenbank-Flag parameterized_views.enabled
, um die erforderlichen Erweiterungsbibliotheken zu laden. Weitere Informationen finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
Datenbank einrichten
- Erstellen Sie eine Datenbank namens
database
für die Anwendungsdaten und parametrisierten Ansichten. Weitere Informationen finden Sie unter Datenbank erstellen.
Datenbankrollen, die Erweiterung und das Anwendungsschema erstellen
Stellen Sie über AlloyDB Studio oder psql eine Verbindung zur Datenbank als
postgres
-Nutzer oder als Nutzer mit AlloyDB-Superuser-Berechtigungen her.psql database -U postgres
Weitere Informationen finden Sie unter Datenbanknutzerverwaltung in AlloyDB.
Erstellen Sie die Erweiterung
parameterized_views
in 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
, damit die APIs im Namespace dieses Schemas enthalten sind und nicht mit vorhandenen APIs in Konflikt geraten.Erstellen Sie die AlloyDB-Administratorrolle, die die Datenbank besitzt und 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 die Anwendung verwendet, um eine Verbindung zur Datenbank herzustellen und sich in der Datenbank anzumelden, um Abfragen mit eingeschränktem Zugriff auf öffentliche Funktionen oder Objekte auszuführen, die auf den minimal erforderlichen Satz beschränkt sind.
CREATE ROLE psv_user WITH LOGIN PASSWORD '...';
Weitere Informationen finden Sie unter
CREATE USER
.Stellen Sie eine Verbindung als Administratornutzer her.
SET role TO admin_user;
Erstellen Sie das Schema, das die Tabellen enthält.
CREATE SCHEMA schema;
Erstellen Sie die Tabellen und fügen Sie Daten ein.
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 entsprechende Zugriffsberechtigungen für die Basistabelle und Ansichten ein:
Stellen Sie mit AlloyDB Studio oder psql als
admin_user
eine Verbindung zur Datenbank her.psql database -U admin_user
Wenn Sie eingeschränkten Zugriff auf die Ansicht gewähren 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;
Zugriff auf die Ansicht gewähren
GRANT SELECT ON schema.secure_checked_items TO psv_user;
Um auf die Ansicht zuzugreifen, müssen Sie Zugriff auf das Schema gewähren.
GRANT USAGE ON SCHEMA schema TO psv_user;
Heben Sie den direkten Zugriff auf die Basistabelle auf.
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, um eine Verbindung zur Datenbank herzustellen und sich in der Datenbank anzumelden, um Abfragen auszuführen.
Verbindung als Nutzer mit parametrisierten sicheren Ansichten herstellen
psql database -U psv_user
Prüfen Sie, ob auf die Basistabelle zugegriffen werden kann.
SELECT * FROM schema.checked_items; ERROR: permission denied for table checked_items
Greifen Sie mit der Funktion
execute_parameterized_query
auf 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'] );
Um die Sicherheit von in natürlicher Sprache generierten Abfragen zu verbessern, können Sie Ihre parametrisierten sicheren Ansichten mit AlloyDB AI Natural Language einbinden.