Proteggi e controlla l'accesso ai dati dell'applicazione utilizzando viste sicure parametrizzate

Questo tutorial descrive come utilizzare le visualizzazioni sicure con parametri in AlloyDB per PostgreSQL per limitare l'accesso degli utenti alle visualizzazioni con parametri utilizzando AlloyDB Studio o psql.

Sono inclusi esempi per illustrare le funzionalità delle visualizzazioni sicure con parametri. Questi esempi sono destinati esclusivamente a scopi dimostrativi.

Obiettivi

  • Crea visualizzazioni sicure con parametri con parametri di visualizzazione denominati.
  • Crea il ruolo del database utilizzato dall'applicazione per connettersi al database e accedere alle visualizzazioni sicure con parametri.
  • Concedi le autorizzazioni del nuovo ruolo alle visualizzazioni sicure e revoca l'accesso alle tabelle di base.
  • Connettiti utilizzando il nuovo ruolo e verifica che non sia possibile accedere alle tabelle con limitazioni.
  • Esegui query sulla visualizzazione sicura con parametri utilizzando la funzione execute_parameterized_query.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi Google Cloud utenti potrebbero avere diritto a una prova senza costi.

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.

Prima di iniziare

Abilita la fatturazione e le API richieste

  1. Nellaconsole, seleziona un progetto. Google Cloud

    Vai al selettore di progetti

  2. Verifica che la fatturazione sia abilitata per il tuo Google Cloud progetto.

  3. Abilita le API Cloud necessarie per creare e connetterti ad AlloyDB per PostgreSQL.

    Abilita l'API

    1. Nel passaggio Conferma progetto, fai clic su Avanti per confermare il nome del progetto a cui apporterai le modifiche.
    2. Nel passaggio Abilita API, fai clic su Abilita per abilitare quanto segue:

      • API AlloyDB

Creare e connettersi a un database

  1. Crea un cluster e la relativa istanza principale.
  2. Connettiti all'istanza e crea un database.

prepara l'ambiente

Per prepararti a eseguire query su una visualizzazione sicura con parametri, devi prima configurare le visualizzazioni con parametri, il database e i ruoli del database, l'estensione parameterized_view e lo schema dell'applicazione.

Abilita l'estensione richiesta

Abilita il flag di database parameterized_views.enabled, che carica le librerie di estensioni richieste. Per ulteriori informazioni, consulta Configurare i flag di database di un'istanza.

Configura il database

  • Crea un database denominato database per i dati dell'applicazione e le visualizzazioni con parametri. Per ulteriori informazioni, consulta Creare un database.

Crea ruoli del database, l'estensione e lo schema dell'applicazione

  1. Utilizzando AlloyDB Studio o psql, connettiti al database come utente postgres o come utente con privilegi di superutente AlloyDB.

    psql database -U postgres
    

    Per ulteriori informazioni, consulta Informazioni sulla gestione degli utenti del database in AlloyDB.

  2. Crea l'estensione parameterized_views nel database.

    -- Requires parameterized_views.enabled set to true
    CREATE EXTENSION parameterized_views;
    

    Quando viene creata l'estensione, il sistema crea anche uno schema denominato parameterized_views in modo che le API siano contenute nello spazio dei nomi dello schema e non siano in conflitto con le API esistenti.

  3. Crea il ruolo amministrativo di AlloyDB, che possiede e gestisce il database.

    CREATE ROLE admin_user WITH LOGIN PASSWORD '...';
     GRANT ALL PRIVILEGES ON DATABASE database TO admin_user;
    

    Per ulteriori informazioni, consulta CREATE USER.

  4. Crea un nuovo ruolo del database per l'esecuzione di query sulle visualizzazioni sicure con parametri. Si tratta di un ruolo AlloyDB che l'applicazione utilizza per connettersi e accedere al database per eseguire query con accesso limitato alle funzioni o agli oggetti pubblici al set minimo richiesto.

    CREATE ROLE psv_user WITH LOGIN PASSWORD '...';
    

    Per ulteriori informazioni, consulta CREATE USER.

  5. Connettiti come utente amministratore.

    SET role TO admin_user;
    
  6. Crea lo schema contenente le tabelle.

    CREATE SCHEMA schema;
    
  7. Crea le tabelle e inserisci i dati.

    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);
    

Crea visualizzazioni sicure con parametri e configura i privilegi di accesso

Per creare visualizzazioni sicure con parametri e configurare i privilegi di accesso appropriati per la tabella e le visualizzazioni di base:

  1. Utilizzando AlloyDB Studio o psql, connettiti al database come admin_user.

    psql database -U admin_user
    
  2. Per fornire un accesso limitato alla visualizzazione, crea una visualizzazione sicura con parametri:

    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. Concedi l'accesso alla visualizzazione.

    GRANT SELECT ON schema.secure_checked_items TO psv_user;
    
  4. Per accedere alla visualizzazione, concedi l'accesso allo schema.

    GRANT USAGE ON SCHEMA schema TO psv_user;
    
  5. Revoca l'accesso diretto alla tabella di base.

    REVOKE ALL PRIVILEGES ON schema.checked_items FROM psv_user;
    

Verifica la sicurezza dei dati

Per verificare che le visualizzazioni sicure con parametri limitino l'accesso alle visualizzazioni designate, esegui i seguenti comandi come psv_user. Si tratta di un ruolo del database AlloyDB che l'applicazione utilizza per connettersi e accedere al database per eseguire query.

  1. Connettiti come utente delle visualizzazioni sicure con parametri.

    psql database -U psv_user
    
  2. Verifica che non sia possibile accedere alla tabella di base.

    SELECT * FROM schema.checked_items;
    ERROR:  permission denied for table checked_items
    
  3. Accedi alla visualizzazione sicura con parametri utilizzando la funzione execute_parameterized_query:

    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. Per migliorare la sicurezza delle query generate in linguaggio naturale, integra le visualizzazioni sicure con parametri utilizzando il linguaggio naturale di AlloyDB AI.

Libera spazio

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  1. Nella Google Cloud console, vai alla pagina Cluster.

    Vai a Cluster

  2. Nella colonna Nome risorsa, fai clic sul nome del cluster, my-cluster.

  3. Fai clic su Elimina cluster.

  4. In Elimina cluster my-cluster, inserisci my-cluster per confermare che vuoi eliminare il cluster.

  5. Fai clic su Elimina.

  6. Se hai creato una connessione privata quando hai creato un cluster, vai alla Google Cloud pagina Rete della console e fai clic su Elimina rete VPC.

  7. Utilizzando AlloyDB Studio o psql, connettiti al database come postgres.

    psql database -U postgres
    
  8. Elimina gli oggetti che hai creato.

    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;
    

Passaggi successivi