Parametrisierte sichere Ansichten bieten Datensicherheit und Zeilenzugriffssteuerung für Anwendungen. Sie filtern Abfrageergebnisse basierend auf der Identität des Anwendungsnutzers.
In dieser Anleitung wird beschrieben, wie Sie parametrisierte sichere Ansichten in Cloud SQL einrichten, Datenbankrollen und ‑berechtigungen konfigurieren, um den Zugriff auf Basistabellen einzuschränken, und die Datensicherheit überprüfen. Die in diesem Dokument enthaltenen 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.
Wenn Ihre Anwendung eine detailliertere Sicherheit als der Standardzugriff auf Datenbankebene erfordert, können Sie parametrisierte sichere Ansichten verwenden, um sicherzustellen, dass Nutzer nur die Daten sehen, für die sie autorisiert sind. Parametrisierte sichere Ansichten bieten dynamische Datensicherheit und Zeilenzugriffssteuerung, die für SaaS-Anwendungen mit mehreren Mandanten geeignet sind, ohne dass separate Datenbankrollen für jeden Endnutzer der Anwendung erforderlich sind.
Die Verwendung parametrisierter sicherer Ansichten bietet drei Hauptvorteile:
- Dynamische Datensicherheit und Zeilenzugriffssteuerung: Abfragen werden mit Endnutzer-IDs gefiltert, sodass Nutzer unabhängig von der Formulierung der Abfrage nur auf die Daten zugreifen können, für die sie autorisiert sind.
- Einfachere Rollenverwaltung: Für alle Anwendungsnutzer wird eine gemeinsame Datenbankrolle verwendet, anstatt separate Datenbankrollen für jeden einzelnen Nutzer zu verwalten.
Ziele
- Parametrisierte sichere 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 die parametrisierten sicheren 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 Ansicht mit der gespeicherten Prozedur
mysql.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 Google Cloud Nutzern vonsteht 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
Bevor Sie parametrisierte sichere Ansichten erstellen, müssen Sie die folgenden Voraussetzungen erfüllen.
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 Cloud SQL 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:
- Cloud SQL for MySQL API
- Knowledge Catalog API
Erstellen und Verbindung zu einer Datenbank herstellen
- Erstellen Sie eine Instanz.
- Stellen Sie eine Verbindung zu Ihrer Instanz her und erstellen Sie eine Datenbank.
Umgebung vorbereiten
Bereiten Sie die Datenbank, die Datenbankrollen und das Anwendungsschema vor, um Abfragen für eine parametrisierte sichere Ansicht auszuführen.
Datenbank-Flag aktivieren
- Prüfen Sie, ob auf Ihrer Cloud SQL for MySQL-Instanz Cloud SQL for MySQL 8.0.43 oder höher ausgeführt wird. Wenn auf Ihrer Cloud SQL for MySQL 8.0-Instanz eine frühere Nebenversion ausgeführt wird, können Sie ein Upgrade auf eine Nebenversion durchführen.
- Aktivieren Sie das Datenbank-Flag
cloudsql_parameterized_secure_viewfür Ihre Instanz. Für diese Flag-Änderung ist kein Neustart der Datenbank erforderlich. Weitere Informationen finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
Datenbank und Rollen einrichten
Rufen Sie in der Google Cloud Console die Seite „Cloud SQL“ auf.
Wählen Sie eine Instanz aus der Liste aus.
Klicken Sie im Navigationsmenü auf Cloud SQL Studio.
Melden Sie sich mit einem Administratorkonto 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 eine Datenbank mit dem Namen
store_dbfür die Anwendungsdaten und ‑ansichten:CREATE DATABASE IF NOT EXISTS store_db; USE store_db;Erstellen Sie eine neue Datenbankrolle zum Ausführen von Abfragen für parametrisierte Ansichten. Die Anwendung verwendet diese Rolle, um eine Verbindung zur Datenbank herzustellen und Abfragen mit Zugriff auszuführen, der streng auf autorisierte Ansichten beschränkt ist:
CREATE ROLE 'psv_user';
Tabelle erstellen und Daten einfügen
Rufen Sie in der Google Cloud Console die Seite „Cloud SQL“ auf.
Wählen Sie in der Liste eine Cloud SQL for MySQL-Instanz aus.
Klicken Sie im Navigationsmenü auf Cloud SQL Studio.
Melden Sie sich mit der Datenbankauthentifizierung in Studio an.
Klicken Sie auf Neuer Tab , um einen neuen SQL-Editor-Tab zu öffnen.
Erstellen Sie die Tabellen und fügen Sie Daten ein:
CREATE TABLE store_db.checked_items ( bag_id INT, timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT ); INSERT INTO store_db.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);
Parametrisierte sichere Ansichten erstellen und Zugriffsberechtigungen einrichten
So erstellen Sie parametrisierte sichere Ansichten:
Rufen Sie in der Google Cloud Console die Seite „Cloud SQL“ auf.
Wählen Sie eine Instanz aus der Liste aus.
Klicken Sie im Navigationsmenü auf Cloud SQL Studio.
Melden Sie sich in Studio an und stellen Sie eine Verbindung zur
databasealsstore_db-Nutzerkonto her, das Sie im vorherigen Abschnitt verwendet haben.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 eine parametrisierte Ansicht, um den Zugriff auf die Ansicht einzuschränken:
CREATE VIEW store_db.secure_checked_items AS SELECT bag_id, timestamp, location FROM store_db.checked_items t WHERE customer_id = @app_end_userid;Gewähren Sie der Rolle
psv_userSELECT-Zugriff auf die parametrisierte Ansicht:GRANT SELECT ON store_db.secure_checked_items TO 'psv_user';Gewähren Sie die Ausführungsberechtigung für die integrierte gespeicherte Systemprozedur, die zum sicheren Ausführen parametrisierter Abfragen verwendet wird:
GRANT EXECUTE ON PROCEDURE mysql.execute_parameterized_query TO 'psv_user';Optional. Heben Sie alle direkten Berechtigungen für die Basistabelle von
psv_userexplizit auf, um zu verhindern, dass Nutzer die sichere Ansicht umgehen können:REVOKE ALL PRIVILEGES ON store_db.checked_items FROM 'psv_user';Weisen Sie die Rolle
psv_userdem IAM-authentifizierten Datenbanknutzer oder dem Anmeldekonto der Anwendung zu:GRANT 'psv_user' TO 'IAM_USER_EMAIL'@'%'; SET DEFAULT ROLE 'psv_user' TO 'IAM_USER_EMAIL'@'%';Ersetzen Sie
IAM_USER_EMAILdurch die E-Mail-Adresse Ihres IAM-Nutzers oder das Anmeldekonto der Anwendung.
Datensicherheit überprüfen
So prüfen Sie, ob Sie die parametrisierten sicheren Ansichten abfragen können:
Melden Sie sich mit der eingeschränkten IAM-E-Mail-Adresse oder der Anwendung an Cloud SQL Studio an.
Klicken Sie auf Neuer Tab , um einen neuen SQL-Editor-Tab zu öffnen.
Fragen Sie die Basistabelle ab und prüfen Sie, ob der Zugriff verweigert wird.
SELECT * FROM store_db.checked_items;Die Datenbank gibt den
ERROR 1142 (42000): SELECT command denied to user 'IAM_USER_EMAIL'@'%' for table 'checked_items'Fehler zurück.Fragen Sie die parametrisierte sichere Ansicht mit der integrierten gespeicherten Prozedur
mysql.execute_parameterized_queryab.CALL mysql.execute_parameterized_query( 'SELECT * FROM store_db.secure_checked_items', 'app_end_userid=303' );Fragen Sie die parametrisierten sicheren Ansichten mit der SQL-Syntax und der Anfrage
QueryDatamit PSV-Parametern ab.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": { "cloud_sql_reference": { "database_reference": { "engine": "MYSQL", "project_id": "PROJECT_ID", "region": "REGION", "instance_id": "INSTANCE_ID", "database_id": "DATABASE_ID" } } }, "parameterized_secure_view_parameters": { "parameters": { "key": "app_end_userid" "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 Cloud SQL for MySQL-Instanz befindet.INSTANCE_ID: Die ID Ihrer Cloud SQL for MySQL-Instanz.DATABASE_ID: Die ID Ihrer Cloud SQL for MySQL-Datenbank.
Bereinigen
Cluster löschen
Wenn Sie den Cluster löschen, den Sie im Abschnitt „Hinweis“ erstellt haben, werden auch alle von Ihnen erstellten Objekte gelöscht.
Rufen Sie in der Google Cloud Console die Seite „Cloud SQL“ auf.
Wählen Sie eine Instanz aus der Liste aus.
Klicken Sie auf Löschen.
Bestätigen Sie, dass Sie die Instanz löschen möchten, indem Sie den Instanznamen eingeben und auf Löschen klicken.
Nächste Schritte
Weitere Informationen zu parametrisierten sicheren Ansichten.