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, i cui contenuti 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, a volte le viste vengono chiamate viste logiche o dinamiche per distinguerle dalle viste materializzate SQL, che memorizzano i risultati della query che definisce la vista come una tabella effettiva nello spazio di archiviazione dei dati.
In Spanner, puoi creare una visualizzazione come visualizzazione dei diritti dell'invoker o visualizzazione dei diritti del definer. Si tratta dei due tipi di modelli di sicurezza che controllano l'accesso degli utenti a una visualizzazione.
Visualizzazioni dei diritti dell'autore dell'invocazione | Visualizzazioni dei diritti del definitore | |
---|---|---|
Descrizione | Se crei una vista con i diritti dell'autore dell'invocazione, un ruolo del database deve disporre di privilegi sulla vista e su tutti gli oggetti dello schema a cui la vista fa riferimento per eseguire query sulla vista. Per ulteriori informazioni, consulta Visualizzazioni dei diritti dell'autore dell'invocazione. | Se crei una vista con i diritti del definitore, un ruolo del database deve disporre di privilegi sulla vista (e solo sulla vista) per eseguire query sulla vista. Utilizza controllo dell'accesso accesso granulare insieme alla visualizzazione dei diritti del definitore, altrimenti la visualizzazione dei diritti del definitore non aggiunge alcun controllo dell'accesso aggiuntivo. Per maggiori informazioni, consulta la sezione Visualizzazioni dei diritti del definitore. |
Autorizzazioni necessarie per creare la visualizzazione | 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 necessari per eseguire query sulla visualizzazione | 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. |
Vantaggi delle visualizzazioni
Le visualizzazioni offrono diversi vantaggi rispetto all'inclusione delle query che definiscono nella logica di applicazione.
Le visualizzazioni possono fornire alle applicazioni la definizione di modelli di dati logici.
A volte le scelte che hanno senso per la definizione del modello di dati fisico 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 visualizzazioni centralizzano le definizioni delle query e semplificano la manutenzione.
Creando visualizzazioni per query complesse o di uso comune, puoi escludere il testo delle query dalle applicazioni e centralizzarlo. In questo modo, è molto più semplice mantenere aggiornato il testo delle query tra le applicazioni e consente di rivedere e ottimizzare le query senza dover modificare il codice dell'applicazione.
Le visualizzazioni garantiscono la stabilità in caso di modifiche allo schema.
Poiché la query che definisce una vista è archiviata nello schema del database anziché nella logica dell'applicazione, Spanner può e garantisce che le modifiche dello schema agli oggetti (tabelle, colonne e così via) a cui fa riferimento la query non la invalidino.
Casi d'uso comuni
Utilizza le visualizzazioni quando il database Spanner include dati con elevati privilegi che non devono essere esposti a tutti gli utenti del database o se vuoi incapsulare i dati.
Se la visualizzazione non richiede funzionalità di sicurezza aggiuntive e tutti gli invocanti della visualizzazione hanno accesso a tutti gli oggetti dello schema a cui fa riferimento, crea una visualizzazione dei diritti dell'invocatore.
Se vuoi creare una vista in cui non tutti gli invocanti hanno accesso a tutti gli oggetti dello schema a cui fa riferimento la vista, crea una vista dei diritti del definitore. Le visualizzazioni dei diritti del definitore sono protette meglio e hanno più limitazioni perché l'amministratore del database può concedere a un numero inferiore di utenti i privilegi per le tabelle e le colonne a cui viene fatto riferimento nella visualizzazione. Le visualizzazioni dei diritti del definitore sono utili quando un utente necessita 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 dell'account personale (ad es. cliente dell'applicazione).
- Dati specifici per ruolo (ad es. Personale RU, addetto alle vendite).
- Dati specifici per la località.
Visualizzazioni dei diritti dell'autore dell'invocazione
Se una vista ha i diritti dell'invoker, 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 dei privilegi su tutti gli oggetti dello schema per eseguire query sulla visualizzazione.
Visualizzazioni dei diritti del definitore
Una visualizzazione dei diritti di un definitore aggiunge funzionalità di sicurezza aggiuntive alla visualizzazione. Fornisce diversi privilegi sulla vista e sugli oggetti dello schema sottostanti. Come per le visualizzazioni dei diritti dell'autore dell'invocazione, gli utenti devono disporre delle autorizzazioni a livello di database per creare visualizzazioni dei diritti del definitore. La differenza principale è che quando un ruolo di database esegue query sulla visualizzazione dei diritti di un definitore, Spanner verifica che il ruolo abbia accesso alla visualizzazione stessa (e solo a quella). Pertanto, anche se l'utente che esegue query sulla vista non ha accesso a tutti gli oggetti dello schema sottostanti, può accedere alla vista e visualizzarne i contenuti. Le visualizzazioni dei diritti del definitore consentono agli utenti di accedere a dati aggiornati, limitati alle righe definite nella visualizzazione.
Le autorizzazioni IAM (Identity and Access Management) di Spanner vengono concesse a livello di database. Utilizza il controllo granulare dell'accesso 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 sul database, dispone delle autorizzazioni di lettura su tutti gli oggetti dello schema nel database. Dopo aver configurato controllo dell'accesso granulare nel database, gli utenti 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 del controllo dell'accesso granulare non ha bisogno di privilegi sugli 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 visualizzazione non può utilizzare i parametri di query.
Le visualizzazioni non possono essere indicizzate.
I riferimenti alle visualizzazioni non possono utilizzare i suggerimenti 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 visualizzazioni dei diritti del definitore non sono supportate con Spanner Data Boost.
L'esecuzione di una query contenente una 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 query in una modalità di query diversa da quella normale.
È possibile che un utente crei una query accuratamente elaborata che causi un errore di Spanner che mostra o rivela l'esistenza di dati non disponibili nella visualizzazione dei diritti del definitore.
Ad esempio, supponiamo che esista la seguente visualizzazione PunteggiStudentiidonei 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 6, il punteggio è importante e lo studente deve ottenere almeno 50 punti all'esame per ottenere la certificazione. In caso contrario, per i livelli uguali 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 sotto forma di
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 uno studente del livello 7 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 visualizzazioni
Il rendimento di una query che fa riferimento a una visualizzazione è paragonabile a quello della stessa query con il riferimento alla visualizzazione sostituito dalla definizione della visualizzazione.
Quote e limiti che si applicano alle visualizzazioni
La pagina Quote e limiti elenca le informazioni su quote e limiti specificamente per le visualizzazioni.
L'utilizzo di una vista in una query può influire sulla conformità della query ai limiti di 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 visualizzazioni non influisce sulle esigenze di capacità di calcolo di un'istanza, rispetto all'inserimento del testo della query definito nelle query che fanno riferimento a queste.
L'utilizzo delle visualizzazioni ha un impatto molto ridotto sullo spazio di archiviazione del database di un'istanza perché la tabella generata dall'esecuzione della definizione di query di una visualizzazione non viene salvata nello spazio di archiviazione del database permanente.
Passaggi successivi
- Scopri come creare e gestire le viste.