Panoramica delle visualizzazioni

Questo documento presenta e descrive le viste Spanner.

Panoramica

Una vista è una tabella virtuale definita da una query SQL. Quando crei una vista, specifichi la query SQL che rappresenta. Una volta creata una vista, puoi eseguire query che fanno riferimento alla vista come se fosse una tabella.

Quando viene eseguita una query che fa riferimento a una vista, Spanner crea la tabella virtuale eseguendo la query definita nella vista e i contenuti della tabella virtuale vengono utilizzati dalla query di riferimento.

Poiché la query che definisce una vista viene eseguita ogni volta che viene eseguita una query che fa riferimento alla vista, le viste vengono talvolta chiamate viste logiche o viste dinamiche per distinguerle dalle viste materializzate SQL, che archiviano i risultati della query che definisce la vista come una tabella effettiva nello spazio di archiviazione dei dati.

In Spanner, puoi creare una vista come vista con diritti di chi richiama o vista con diritti di chi definisce. Sono i due tipi di modelli di sicurezza che controllano l'accesso a una vista per gli utenti.

Viste con diritti del chiamanteViste con diritti del definer
Descrizione Se crei una vista con i diritti di chi richiama, un ruolo del database deve disporre dei privilegi sulla vista e su tutti gli oggetti schema a cui la vista fa riferimento per eseguire query sulla vista. Per saperne di più, consulta Viste dei diritti di chi richiama. Se crei una vista con i diritti del definer, un ruolo del database deve disporre dei privilegi sulla vista (e solo sulla vista) per eseguire query sulla vista. Utilizza controllo dell'accesso granulare dell'accesso insieme alla vista dei diritti del definer, altrimenti la vista dei diritti del definer non aggiunge alcun controllo dell'accesso aggiuntivo. Per maggiori informazioni, consulta Viste dei diritti del definer.
Autorizzazioni necessarie per creare la vista Per creare, concedere e revocare l'accesso a entrambi i tipi di visualizzazione, devi disporre dell'autorizzazione spanner.database.updateDdl a livello di database.
Privilegi richiesti per eseguire query sulla vista Un ruolo del database deve disporre dei privilegi per la vista e per tutti gli oggetti schema sottostanti per eseguire query sulla vista. Un ruolo del database deve disporre dei privilegi per la vista (e solo per la vista) per eseguire query sulla vista.

Viste parametrizzate

Una vista parametrizzata migliora le visualizzazioni standard per offrire una protezione dei dati più efficace, in particolare nelle applicazioni che utilizzano agenti AI o modelli linguistici di grandi dimensioni (LLM). Il suo scopo principale è inserire in modo sicuro parametri, come l'identità utente, direttamente nella definizione della vista. Questo tipo di vista richiede il modello di sicurezza della vista dei diritti del definer, che consente a Spanner di applicare in modo dinamico la sicurezza a livello di riga in base all'utente che esegue la query.

Per saperne di più, consulta la panoramica delle viste parametrizzate.

Vantaggi delle visualizzazioni

Le viste offrono diversi vantaggi rispetto all'inclusione delle query che definiscono nella logica dell'applicazione.

  • Le viste possono fornire la modellazione logica dei dati alle applicazioni.

    A volte le scelte che hanno senso per la modellazione fisica dei dati su Spanner non sono l'astrazione migliore per le applicazioni che leggono questi dati. Una vista può presentare uno schema di tabella alternativo che rappresenta un'astrazione più appropriata per le applicazioni.

  • Le viste centralizzano le definizioni delle query e semplificano la manutenzione.

    Creando visualizzazioni per query complesse o ampiamente utilizzate, puoi estrarre il testo della query dalle applicazioni e centralizzarlo. In questo modo, è molto più semplice mantenere aggiornato il testo delle query nelle applicazioni e consentire la revisione e l'ottimizzazione delle query senza richiedere la modifica del codice dell'applicazione.

  • Le viste garantiscono stabilità tra le modifiche allo schema.

    Poiché la query che definisce una vista viene archiviata nello schema del database anziché nella logica dell'applicazione, Spanner può garantire e garantisce che le modifiche allo schema degli oggetti (tabelle, colonne e così via) a cui fa riferimento la query non invalidino la query.

Casi d'uso comuni

Utilizza le viste quando il database Spanner include dati con privilegi elevati che non devono essere esposti a tutti gli utenti del database o se vuoi incapsulare i dati.

Se la vista non richiede funzionalità di sicurezza aggiuntive e tutti gli utenti che la richiamano hanno accesso a tutti gli oggetti dello schema a cui fa riferimento, crea una vista con diritti dell'utente che la richiama.

Se vuoi creare una vista in cui non tutti gli utenti che la richiamano hanno accesso a tutti gli oggetti dello schema a cui fa riferimento, crea una vista con diritti del definer. Le viste con diritti del definer sono più protette e hanno più limitazioni perché l'amministratore del database può fornire a un numero inferiore di utenti i privilegi per le tabelle e le colonne a cui viene fatto riferimento nella vista. Le viste con diritti del definer sono utili quando un utente ha bisogno di un modo per accedere in modo sicuro a un sottoinsieme pertinente di un database Spanner. Ad esempio, potresti voler creare una vista con diritti del definer per i seguenti dati:

  • Dati dell'account personale (ad es. cliente dell'applicazione).
  • Dati specifici del ruolo (ad es. personale RU, addetto alle vendite).
  • Dati specifici per la località.

Viste con diritti del chiamante

Se una vista dispone dei diritti di chi richiama, significa che quando un utente, ovvero chi richiama, esegue una query sulla vista, Spanner controlla i privilegi dell'utente sulla vista e su tutti gli oggetti dello schema a cui la vista fa riferimento. L'utente deve disporre dei privilegi su tutti gli oggetti schema per eseguire query sulla vista.

Viste con diritti del definer

Una vista con diritti del definer aggiunge ulteriori funzionalità di sicurezza alla vista. Fornisce privilegi diversi per la vista e gli oggetti dello schema sottostante. Come per le viste con diritti di chi richiama, gli utenti devono disporre di autorizzazioni a livello di database per creare viste con diritti di chi definisce. La differenza principale è che quando un ruolo database esegue una query su una vista con diritti del definer, Spanner verifica che il ruolo abbia accesso alla vista stessa (e solo alla vista). Pertanto, anche se l'utente che esegue la query sulla vista non ha accesso a tutti gli oggetti dello schema sottostante, può accedere alla vista e visualizzarne i contenuti. Le viste con diritti del definer consentono agli utenti di accedere a dati aggiornati, limitatamente alle righe definite nella vista.

Le autorizzazioni IAM (Identity and Access Management) di Spanner vengono concesse a livello di database. Utilizza il controllo granulare dell'accesso insieme alla vista dei diritti del definer, altrimenti la vista dei diritti del definer non aggiunge alcun controllo dell'accesso aggiuntivo. Questo perché se l'utente dispone delle autorizzazioni in lettura sul database, dispone delle autorizzazioni in lettura su tutti gli oggetti dello schema nel database. Dopo aver configurato il controllo granulare dell'accesso nel database, gli utenti con controllo dell'accesso granulare dell'accesso con il privilegio SELECT sulla vista e gli utenti con autorizzazioni a livello di database sul database possono eseguire query sulla vista. La differenza è che l'utente con controllo dell'accesso granulare dell'accesso non ha bisogno di privilegi sugli oggetti sottostanti.

Limitazioni delle visualizzazioni

Le viste presentano limitazioni rispetto alle tabelle effettive che le rendono inappropriate per determinati casi d'uso.

  • Le visualizzazioni sono di sola lettura. Non possono essere utilizzate per aggiungere, aggiornare o eliminare dati.

    Non puoi utilizzare le viste nelle istruzioni DML (INSERT, UPDATE, DELETE).

  • La query che definisce una vista non può utilizzare parametri di query.

  • Le visualizzazioni non possono essere indicizzate.

  • I riferimenti alle viste non possono utilizzare i suggerimenti per le tabelle.

    Tuttavia, la query che definisce una vista può includere suggerimenti per le tabelle a cui fa riferimento.

  • Le visualizzazioni non sono supportate dall'API Read.

  • Le viste dei diritti del definer non sono supportate con Spanner Data Boost.

    L'esecuzione di una query che contiene una vista dei diritti di un definer in Data Boost genera un errore.

  • La modalità di query consigliata per accedere a una vista con diritti del definer è la modalità NORMAL.

    Gli utenti che non hanno accesso agli oggetti dello schema sottostanti di una vista con diritti del definer ricevono un errore quando eseguono query in una modalità di query diversa da quella normale.

  • È possibile che un utente crei una query accuratamente progettata che induce Spanner a generare un errore che mostra o rivela l'esistenza di dati non disponibili nella vista con diritti del definer.

    Ad esempio, supponiamo che esista la seguente vista QualifiedStudentScores che restituisce i punteggi degli studenti idonei per un corso. I criteri di idoneità si basano sul livello e sul punteggio dell'esame dello studente. Se il livello dello studente è pari o inferiore a sei, il punteggio è importante e lo studente deve ottenere almeno 50 punti nell'esame per essere idoneo. In caso contrario, per i livelli pari o superiori a sei, lo studente è idoneo per impostazione predefinita.

      CREATE VIEW QualifiedStudentScores
      SQL SECURITY DEFINER AS
      SELECT
        s.Name,
        s.Level,
        sc.Score
      FROM Students AS s
      JOIN Scores AS sc ON sc.StudentId = s.StudentId
      WHERE
      (CASE
        WHEN (s.Level < 6) OR (s.Level >= 6 AND sc.Score >= 50)
          THEN 'QUALIFIED';
        ELSE 'FAILED';
      END) = 'QUALIFIED';
    

    Un utente può eseguire una query nel formato SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1;. Questa query potrebbe non riuscire con un errore di divisione per zero se è presente uno studente di livello 7 che ha ottenuto un punteggio di 20 punti, anche se la visualizzazione limita i dati a 50 punti e oltre per quel livello.

Prestazioni delle query quando si utilizzano le visualizzazioni

Una query che fa riferimento a una vista ha un rendimento paragonabile a quello della stessa query con il riferimento alla vista sostituito dalla definizione della vista.

Quote e limiti che si applicano alle visualizzazioni

  • La pagina Quote e limiti elenca le informazioni su quote e limiti specifiche per le visualizzazioni.

  • L'utilizzo di una vista in una query può influire sulla conformità della query ai limiti delle query, perché la definizione della vista diventa parte della query.

Impatto sui costi

L'utilizzo delle visualizzazioni ha un impatto molto ridotto sul costo di un'istanza:

  • L'utilizzo delle viste non ha alcun impatto sulle esigenze di capacità di calcolo di un'istanza rispetto all'incorporamento del testo della query definito nelle query che fanno riferimento alle viste.

  • L'utilizzo delle viste ha un impatto molto ridotto sullo spazio di archiviazione del database di un'istanza, perché la tabella generata eseguendo la definizione della query di una vista non viene salvata nello spazio di archiviazione permanente del database.

Passaggi successivi