Panoramica delle visualizzazioni

Questo argomento introduce 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. Dopo aver creato una vista, puoi eseguire query che fanno riferimento a quest'ultima come se si trattasse di una tabella.

Quando viene eseguita una query che fa riferimento a una vista, Spanner crea la tabella virtuale eseguendo la query definita nella vista. 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 sono a volte chiamate visualizzazioni logiche o visualizzazioni dinamiche per distinguerle dalle viste materializzate SQL, che memorizzano i risultati della query che definisce la vista come una tabella effettiva nell'archiviazione dei dati.

In Spanner, puoi creare una vista come visualizzazione dei diritti dell'invoker o vista dei diritti del definitore. Sono i due tipi di modelli di sicurezza che controllano l'accesso a una vista da parte degli utenti.

Visualizzazioni dei diritti dell'invokerVisualizzazioni diritti del definitore
Descrizione Se crei una vista con i diritti dell'invocatore, un ruolo di database deve avere privilegi sulla vista e su tutti gli oggetti dello schema a cui la vista fa riferimento per eseguire query sulla vista. Per maggiori informazioni, consulta Visualizzazioni dei diritti di Invoker. Se crei una vista con i diritti del definitore, un ruolo di database deve avere privilegi sulla vista (e solo sulla vista) per eseguire query sulla vista. Utilizza controllo dell'accesso dell'accesso granulare insieme alla visualizzazione dei diritti del definitore, altrimenti la visualizzazione dei diritti del definitore non aggiunge alcun controllo dell'accesso dell'accesso aggiuntivo. Per ulteriori informazioni, consulta Visualizzazioni dei diritti del definitore.
Autorizzazioni necessarie per creare la vista Per creare, concedere e revocare l'accesso a entrambi i tipi di vista, devi disporre dell'autorizzazione spanner.database.updateDdl a livello di database.
Privilegi necessari per eseguire query sulla vista Per eseguire query sulla vista, un ruolo di database deve disporre dei privilegi relativi alla vista e a tutti gli oggetti dello schema sottostanti. Un ruolo di database deve disporre dei privilegi relativi alla vista (e solo alla vista) per eseguire query sulla vista.

Vantaggi delle visualizzazioni

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

  • Le viste possono fornire una modellazione logico dei dati alle applicazioni.

    A volte le scelte significative per la modellazione fisica dei dati su Spanner non sono l'astrazione migliore per le applicazioni che leggono i dati. Una vista può presentare uno schema di tabella alternativa che è un'astrazione più appropriata per le applicazioni.

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

    Creando viste per le query ampiamente utilizzate o complesse, puoi differenziare il testo delle query dalle applicazioni e centralizzarlo. In questo modo, è molto più semplice mantenere aggiornato il testo delle query tra le applicazioni e puoi rivedere e ottimizzare le query senza richiedere la modifica del codice dell'applicazione.

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

    Poiché la query che definisce una vista è 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 si riferisce la query non invalidano la query.

Casi d'uso comuni

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

Se la vista non ha bisogno di funzionalità di sicurezza aggiuntive e tutti gli attivatori della vista hanno accesso a tutti gli oggetti dello schema a cui fa riferimento la vista, crea una vista dei diritti dell'invocatore.

Se vuoi creare una vista in cui non tutti gli attivatori hanno accesso a tutti gli oggetti dello schema a cui fa riferimento la vista, crea una vista dei diritti del definitore. Le viste dei diritti del definitore sono meglio protette e hanno più limitazioni perché l'amministratore del database può fornire meno utenti con privilegi nelle tabelle e nelle colonne a cui si fa riferimento nella vista. Le viste dei diritti del definitore 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 dei diritti del definitore per i seguenti dati:

  • Dati personali dell'account (ad esempio, cliente dell'applicazione).
  • Dati specifici dei ruoli (ad es. personale RU, addetto alle vendite).
  • Dati specifici della località.

Visualizzazioni dei diritti dell'invoker

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

Visualizzazioni diritti del definitore

La visualizzazione dei diritti di un definitore aggiunge ulteriori funzionalità di sicurezza. Fornisce diversi privilegi per la vista e gli oggetti schema sottostanti. Come per le viste dei diritti dell'invocatore, gli utenti devono disporre di autorizzazioni a livello di database per creare le viste dei diritti del definitore. La differenza principale è che quando un ruolo del database esegue una query sulla vista dei diritti di un definitore, Spanner verifica che il ruolo abbia accesso alla vista stessa (e solo alla vista). Di conseguenza, anche se l'utente che esegue una query sulla vista non ha accesso a tutti gli oggetti schema sottostanti, può accedere alla vista e vederne i contenuti. Le viste dei diritti del definitore consentono agli utenti di accedere a dati aggiornati, limitati alle righe definite nella vista.

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

Limitazioni delle visualizzazioni

Le visualizzazioni sono limitate rispetto alle tabelle effettive, il che le rende inappropriate per determinati casi d'uso.

  • Le visualizzazioni sono di sola lettura. Non possono essere utilizzati 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 hint di tabella.

    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 definitore non sono supportate con Spanner Data Boost.

    L'esecuzione di una query contenente una vista dei diritti del definitore in Data Boost genera un errore.

  • La modalità query consigliata per accedere alla visualizzazione dei diritti di un definitore è la modalità NORMAL.

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

  • È possibile che un utente crei una query creata con cura che provoca la generazione di un errore di Spanner che mostra o rivela l'esistenza di dati che non sono disponibili nella visualizzazione dei diritti del definitore.

    Supponiamo, ad esempio, che ci sia la seguente visualizzazione qualificataStudentScores, che restituisce i punteggi degli studenti che si qualificano per un corso. I criteri per ottenere l'idoneità si basano sul livello e sul punteggio dell'esame dello studente. Se il livello dello studente è uguale o inferiore a 6, il punteggio è importante e lo studente deve ottenere almeno 50 punti per essere idoneo. Altrimenti, per i livelli uguali o superiori a sei, lo studente si qualifica 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 una divisione per errore pari a zero se uno studente di livello 7 ha ottenuto un punteggio di 20 punti, anche se la visualizzazione limita i dati a 50 o più punti per quel livello.

Prestazioni delle query con l'utilizzo delle viste

Una query che fa riferimento a una vista viene eseguita in modo paragonabile a quella della stessa query, sostituendo il riferimento della vista con la definizione della vista.

Quote e limiti che si applicano alle viste

  • Nella pagina Quote e limiti sono elencate le informazioni relative a quota 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 fa parte della query.

Impatto sui costi

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

  • L'uso 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 vi fanno riferimento.

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

Passaggi successivi