In dieser Anleitung wird beschrieben, wie Sie parametrisierte sichere Ansichten in AlloyDB for PostgreSQL verwenden, um den Nutzerzugriff auf Datenbanktabellen einzuschränken. In diesem Lernprogramm richten Sie parametrisierte sichere Ansichten ein, konfigurieren Datenbankrollen und ‑berechtigungen, um den Zugriff auf Basistabellen einzuschränken, und prüfen die Datensicherheit. Parametrisierte sichere Ansichten tragen dazu bei, Anwendungen zu schützen, die Abfragen in natürlicher Sprache verwenden, die mit der QueryData API generiert wurden.
Es sind Beispiele enthalten, um die Funktionen von parametrisierten sicheren Ansichten zu veranschaulichen. Diese Beispiele dienen nur zu Demonstrationszwecken.
Was sind parametrisierte sichere Ansichten?
Als allgemeine Best Practice sollte Ihre Anwendung mit einem Dienstkonto ausgeführt werden, das den minimal erforderlichen Zugriff auf Ihre Datenbank hat. Wenn Ihre Anwendung beispielsweise nicht in Ihre Datenbank schreiben soll, sollte sie eine Rolle mit schreibgeschütztem Zugriff verwenden. Sie sollten diese Zugriffssteuerungen auf Datenbankebene konfigurieren.
Es gibt jedoch Fälle, in denen Ihre Anwendung detailliertere Sicherheitskontrollen als die standardmäßigen Zugriffsrechte auf Datenbankebene benötigt. Parametrisierte sichere Ansichten bieten Anwendungssicherheit und Zeilenzugriffssteuerung mithilfe von SQL-Ansichten. Sie tragen dazu bei, dass Anwendungsnutzer nur die Daten sehen können, auf die sie Zugriff haben.
Parametrisierte sichere Ansichten verringern Sicherheitsrisiken bei der Verarbeitung von Ad-hoc- oder LLM-generierten Anfragen in natürlicher Sprache. Dazu werden Ansichten mit Endnutzer-IDs parametrisiert. So wird sichergestellt, dass Nutzer unabhängig von der Formulierung der Anfrage nur auf ihre autorisierten Daten zugreifen können. Dieser Ansatz vereinfacht auch die Nutzerverwaltung, da eine einzelne Datenbankrolle alle Anwendungsnutzer sicher bedienen kann. So ist es nicht erforderlich, separate Datenbankrollen für jeden Nutzer zu erstellen, um die Sicherheit auf Zeilenebene zu erzwingen.
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_queryoder der QueryData API ausfü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.
Neuen Nutzern von Google Cloud steht möglicherweise eine kostenlose Testversion zur Verfügung.
Löschen Sie die von Ihnen erstellten Ressourcen, um weitere Kosten zu vermeiden, wenn Sie die Aufgaben in diesem Dokument abgeschlossen haben. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
Erfüllen Sie die folgenden Voraussetzungen, bevor Sie ein Kontextset erstellen.
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 for PostgreSQL API
- Dataplex Universal Catalog API
Erstellen und Verbindung zu einer Datenbank herstellen
Umgebung vorbereiten
Zur Vorbereitung auf das Ausführen von Abfragen für eine parametrisierte sichere Ansicht müssen Sie die Datenbank, die Datenbankrollen, die Erweiterung parameterized_view und das Anwendungsschema einrichten.
Erforderliche Erweiterung aktivieren
Aktivieren Sie das Datenbank-Flagparameterized_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
databasefür die Anwendungsdaten und parametrisierten Ansichten. Weitere Informationen finden Sie unter Datenbank erstellen.
Datenbankrollen, die Erweiterung und das Anwendungsschema erstellen
Rufen Sie in der Google Cloud Console die Seite „AlloyDB“ auf.
Wählen Sie einen Cluster aus der Liste aus.
Klicken Sie im Navigationsmenü auf AlloyDB Studio.
Melden Sie sich mit der Postgres-Authentifizierung in Studio an.
Klicken Sie auf Authentifizieren. Im Bereich „Explorer“ wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
Klicken Sie auf Neuer SQL-Editor-Tab oder Neuer Tab, um einen neuen Tab zu öffnen.
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.Melden Sie sich als Nutzer mit Superuser-Berechtigungen an, z. B. als integrierter Postgres-Nutzer. Wenn Sie einen neuen Superuser erstellen möchten, z. B.
admin_user, führen Sie die folgenden Befehle aus: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 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;Erstellen Sie die Tabellen und fügen Sie Daten ein.
CREATE TABLE store.checked_items(bag_id INT,timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT); INSERT INTO store.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 die Ansichten ein:
Rufen Sie in der Google Cloud Console die Seite „AlloyDB“ auf.
Wählen Sie einen Cluster aus der Liste aus.
Klicken Sie im Navigationsmenü auf AlloyDB Studio.
Melden Sie sich in Studio an und stellen Sie als
admin_usereine Verbindung zudatabaseher.Klicken Sie auf Authentifizieren. Im Bereich „Explorer“ wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
Klicken Sie auf Neuer SQL-Editor-Tab oder Neuer Tab, um einen neuen Tab zu öffnen.
Wenn Sie eingeschränkten Zugriff auf die Ansicht gewähren möchten, erstellen Sie eine parametrisierte sichere Ansicht:
CREATE VIEW store.secure_checked_items WITH (security_barrier) AS SELECT bag_id, timestamp, location FROM store.checked_items t WHERE customer_id = $@app_end_userid;Gewähren Sie Zugriff auf die Ansicht.
GRANT SELECT ON store.secure_checked_items TO psv_user;Um auf die Ansicht zuzugreifen, müssen Sie Zugriff auf das Schema gewähren.
GRANT USAGE ON SCHEMA store TO psv_user;Heben Sie den direkten Zugriff auf die Basistabelle auf.
REVOKE ALL PRIVILEGES ON store.checked_items FROM psv_user;Melden Sie sich als
admin_user-Administrator an und weisen Sie einem IAM-authentifizierten Nutzer die Rollepsv_userzu.GRANT psv_user TO "IAM_USER_EMAIL";Ersetzen Sie
IAM_USER_EMAILdurch die E-Mail-Adresse Ihres IAM-Nutzers.
Datensicherheit prüfen
Melden Sie sich als IAM-authentifizierter Nutzer bei der Datenbank an, um zu prüfen, ob der Zugriff auf die angegebenen Ansichten durch die parametrisierten sicheren Ansichten eingeschränkt wird. In AlloyDB übernehmen IAM-Nutzer die Berechtigungen der ihnen zugewiesenen Datenbankrollen.
Melden Sie sich als IAM-authentifizierter Nutzer bei der Datenbank an.
Prüfen Sie, ob auf die Basistabelle zugegriffen werden kann.
SELECT * FROM store.checked_items; 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 store.secure_checked_items', param_names => ARRAY ['app_end_userid'], param_values => ARRAY ['303'] );Die parametrisierte sichere Ansicht mit SQL-Syntax und der
QueryData-Anfrage mit PSV-Parametern abfragen
curl -X POST \
"https://geminidataanalytics.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION:queryData" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"prompt": "Show me the checked items.",
"context": {
"datasource_references": {
"alloydb": {
"database_reference": {
"project_id": "PROJECT_ID",
"region": "REGION",
"cluster_id": "CLUSTER_ID",
"instance_id": "INSTANCE_ID",
"database_id": "DATABASE_ID"
}
}
},
"parameterized_secure_view_parameters": {
"parameters": {
"app_end_userid": "303"
}
}
},
"generation_options": {
"generate_query_result": true,
"generate_natural_language_answer": true,
"generate_explanation": true
}
}'Ersetzen Sie die folgenden Werte:
PROJECT_ID: Ihre Google Cloud Projekt-IDREGION: Die Region, in der sich Ihre AlloyDB for PostgreSQL-Instanz befindet.CLUSTER_ID: Die ID Ihres AlloyDB for PostgreSQL-Clusters.INSTANCE_ID: Die ID Ihrer AlloyDB for PostgreSQL-Instanz.DATABASE_ID: Die ID Ihrer AlloyDB for PostgreSQL-Datenbank.
Bereinigen
Cluster löschen
Wenn Sie den Cluster löschen, den Sie im Abschnitt Vorbereitung erstellt haben, werden auch alle von Ihnen erstellten Objekte gelöscht.
Rufen Sie in der Google Cloud Console die Seite „AlloyDB“ auf.
Wählen Sie einen Cluster aus der Liste aus.
Klicken Sie auf Cluster löschen.
Geben Sie unter Cluster löschen den Namen des Clusters ein, um zu bestätigen, dass Sie den Cluster löschen möchten.
Nächste Schritte
- Weitere Informationen zu parametrisierten sicheren Ansichten
- Informationen zum Verwalten der Sicherheit von Anwendungsdaten mit parametrisierten sicheren Ansichten