Zugriff auf Anwendungsdaten mithilfe von parametrisierten sicheren Ansichten sichern und steuern

Wählen Sie eine Dokumentationsversion aus:

In dieser Anleitung wird beschrieben, wie Sie parametrisierte sichere Ansichten in AlloyDB Omni verwenden, um den Nutzerzugriff auf parametrisierte Ansichten mit AlloyDB Omni Studio oder psql einzuschränken.

Es sind Beispiele enthalten, um die Funktionen von parametrisierten sicheren Ansichten zu veranschaulichen. Diese Beispiele dienen nur zu Demonstrationszwecken.

Ziele

  • Sichere parametrisierte Ansichten mit benannten Ansichtsparametern erstellen
  • Erstellen Sie die Datenbankrolle, die von der Anwendung verwendet wird, um eine Verbindung zur Datenbank herzustellen und auf parametrisierte sichere Ansichten zuzugreifen.
  • Gewähren Sie der neuen Rolle Berechtigungen für die sicheren Ansichten und heben Sie den Zugriff auf die Basistabellen auf.
  • Stellen Sie eine Verbindung mit der neuen Rolle her und prüfen Sie, ob auf die eingeschränkten Tabellen nicht zugegriffen werden kann.
  • Führen Sie Abfragen für die parametrisierte sichere Ansicht mit der Funktion execute_parameterized_query aus.

Datenbank installieren und Verbindung herstellen

  1. Installieren Sie AlloyDB Omni(für Kubernetes, für Container).
  2. Cluster und primäre Instanz erstellen
  3. Verbindung zur Instanz herstellen (für Kubernetes, für Container)

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 jedem neuen Postgres-Container ausführen. Jede Einstellung kann mit ALTER SYSTEM oder durch direktes Bearbeiten der postgresql.conf angewendet werden:

  1. Fügen Sie „parameterized_views“ zu shared_preload_libraries hinzu.
  2. Aktivieren Sie das Feature, indem Sie parameterized_views.enabled=on festlegen.
  3. Starten Sie PostgreSQL neu, damit die Änderungen wirksam werden.

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

  1. Stellen Sie mit psql eine Verbindung zur Datenbank als Nutzer postgres oder als Nutzer mit Superuser-Berechtigungen für AlloyDB Omni her.

    psql database -U postgres
    

    Weitere Informationen finden Sie unter Datenbanknutzerverwaltung in AlloyDB Omni.

  2. 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.

  3. Erstellen Sie die AlloyDB Omni-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.

  4. 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, 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.

    Weitere Informationen finden Sie unter CREATE USER.

  5. Stellen Sie eine Verbindung als Administratornutzer her.

    SET role TO admin_user;
    
  6. Erstellen Sie das Schema, das die Tabellen enthält.

    CREATE SCHEMA schema;
    
  7. 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:

  1. Stellen Sie mit psql eine Verbindung zur Datenbank als admin_user her.

    psql database -U admin_user
    
  2. 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;
    
  3. Zugriff auf die Ansicht gewähren

    GRANT SELECT ON schema.secure_checked_items TO psv_user;
    
  4. Um auf die Ansicht zuzugreifen, müssen Sie Zugriff auf das Schema gewähren.

    GRANT USAGE ON SCHEMA schema TO psv_user;
    
  5. 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 Omni-Datenbankrolle, die von der Anwendung verwendet wird, um eine Verbindung zur Datenbank herzustellen und sich in der Datenbank anzumelden, um Abfragen auszuführen.

  1. Verbindung als Nutzer mit parametrisierten sicheren Ansichten herstellen

    psql database -U psv_user
    
  2. Prüfen Sie, ob auf die Basistabelle zugegriffen werden kann.

    SELECT * FROM schema.checked_items;
    ERROR:  permission denied for table checked_items
    
  3. 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']
    );
    
  4. Um die Sicherheit von Abfragen zu verbessern, die in natürlicher Sprache generiert werden, können Sie Ihre parametrisierten sicheren Ansichten mit natürlicher Sprache integrieren.

Bereinigen

Zur Bereinigung können Sie entweder die AlloyDB Omni-Instanz deinstallieren oder die Instanz beibehalten und die einzelnen Objekte löschen.

Nächste Schritte