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 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 il contenuto della tabella virtuale viene utilizzato 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 a volte sono chiamate viste logiche o viste dinamiche per distinguerle dalle viste materializzate SQL, che archiviano i risultati della query che definiscono la vista come una tabella effettiva nell'archiviazione dei dati.

In Spanner, puoi creare una vista come vista dei diritti dell'invoker o come vista dei diritti dell'autore della definizione. Sono i due tipi di modelli di sicurezza che controllano l'accesso a una vista per gli utenti.

Visualizzazioni dei diritti dell'invokerViste dei diritti del definitore
Descrizione Se crei una vista con i diritti di chi chiama, un ruolo di database deve disporre dei privilegi relativi alla vista e a tutti gli oggetti schema a cui la vista fa riferimento per eseguire query sulla vista. Per maggiori informazioni, consulta Visualizzazioni dei diritti dell'invoker. Se crei una vista con i diritti del definitore, un ruolo del database deve disporre dei 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 questa 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 Un ruolo del database richiede i privilegi per la vista e tutti i relativi oggetti schema sottostanti per eseguire query sulla vista. Un ruolo del database richiede i privilegi necessari per la vista (e solo la vista) per eseguire query sulla vista.

Vantaggi delle visualizzazioni

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

  • I viste possono fornire una modellazione logica dei dati alle applicazioni.

    A volte le scelte che hanno senso per la modellazione fisica dei dati su Spanner non sono la migliore astrazione 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 visualizzazioni centralizzano le definizioni delle query e semplificano la manutenzione.

    Creando viste per query complesse o molto utilizzate, puoi estrarre il testo delle 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 forniscono stabilità nelle modifiche allo schema.

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

Casi d'uso comuni

Utilizza le viste se 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 dati.

Se la tua vista non ha bisogno di funzionalità di sicurezza aggiuntive e tutti i visualizzatori della vista hanno accesso a tutti gli oggetti dello schema a cui fa riferimento la vista, crea una vista dei diritti di un chiamante.

Se vuoi creare una vista in cui non tutti i chiamanti 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 protette in modo più efficace e hanno più restrizioni perché l'amministratore del database può concedere a meno utenti i privilegi sulle tabelle e sulle colonne a cui viene fatto 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 di un definitore per i seguenti dati:

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

Visualizzazioni dei diritti dell'invoker

Se una vista ha i diritti di chi chiama, significa che quando un utente, quest'ultimo, esegue una query sulla vista, Spanner verifica i privilegi dell'utente per la vista e per tutti gli oggetti schema a cui fa riferimento la vista. L'utente deve disporre dei privilegi su tutti gli oggetti schema per eseguire query sulla vista.

Viste dei diritti del definitore

La vista dei diritti di un definitore aggiunge ulteriori funzionalità di sicurezza alla visualizzazione. e fornisce privilegi diversi sulla vista e sugli oggetti schema sottostanti. Come per le viste dei diritti del chiamante, 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). Pertanto, anche se l'utente che esegue una query sulla vista non ha accesso a tutti gli oggetti di schema sottostanti, può accedere alla vista e vederne i contenuti. Le visualizzazioni dei diritti del definitore consentono agli utenti di accedere a dati aggiornati, limitati alle righe definite nella vista.

Le autorizzazioni IAM (Identity and Access Management) di Spanner sono concesse a livello di database. Utilizza un controllo 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. Questo perché se l'utente dispone delle autorizzazioni di lettura per il database, può accedere a tutti gli oggetti schema nel database. Dopo aver configurato controllo dell'accesso granulare sul database, gli utenti con un controllo granulare degli accessi con il privilegio SELECT nella vista e gli utenti con autorizzazioni a livello di database sul database possono eseguire query sulla vista. La differenza è che l'utente del controllo dell'accesso granulare non ha bisogno dei privilegi per gli oggetti sottostanti.

Limitazioni delle visualizzazioni

Le visualizzazioni presentano limitazioni rispetto alle tabelle effettive che le rendono 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 i parametri di query.

  • Le visualizzazioni non possono essere indicizzate.

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

    Tuttavia, la query che definisce una vista può includere suggerimenti sulle tabelle nelle 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 che contiene la visualizzazione dei diritti di un definitore in Data Boost genera un errore.

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

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

  • Un utente può creare una query creata con cura per far sì che Spanner restituisca un errore che mostra o rivela l'esistenza di dati che non sono disponibili nella vista dei diritti del definitore.

    Ad esempio, supponiamo che sia presente la seguente visualizzazione Qualcosa punteggio studente, che restituisce i punteggi degli studenti che si qualificano per un corso. I criteri per 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 nell'esame per qualificarsi. Altrimenti, per livelli uguali o superiori a 6, lo studente viene considerato 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 una divisione per zero errori se c'è uno studente di livello 7 che ha ottenuto un punteggio di 20 punti, anche se la visualizzazione limita i dati a 50 punti o più per quel livello.

Prestazioni delle query quando si utilizzano le viste

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

Quote e limiti che si applicano alle viste

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

  • 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 viste ha un impatto minimo 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 le fanno riferimento.

  • L'utilizzo delle viste ha un impatto minimo sull'archiviazione del database di un'istanza, perché la tabella generata tramite l'esecuzione della definizione della query di una vista non viene salvata nell'archiviazione permanente del database.

Passaggi successivi