Utilizzo della sicurezza a livello di riga con altre funzionalità di BigQuery

Questo documento descrive come utilizzare la sicurezza di accesso a livello di riga con altre funzionalità di BigQuery.

Prima di leggere questo documento, familiarizza con la sicurezza a livello di riga leggendo Introduzione alla sicurezza a livello di riga di BigQuery e Utilizzo della sicurezza a livello di riga.

Il filtro TRUE

I criteri di accesso a livello di riga possono filtrare i dati dei risultati visualizzati quando esegui le query. Per eseguire operazioni diverse dalle query, come la DML, devi disporre dell'accesso completo a tutte le righe della tabella. L'accesso completo viene concesso utilizzando un criterio di accesso alle righe con l'espressione di filtro impostata su TRUE. Questo criterio di accesso a livello di riga è chiamato filtro TRUE.

A qualsiasi utente può essere concesso l'accesso ai filtri TRUE, incluso un account di servizio.

Ecco alcuni esempi di operazioni diverse dalle query:

Esempio di filtro TRUE

CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);

Funzionalità compatibili con il filtro TRUE

Quando utilizzi un'operazione DML su una tabella protetta da criteri di accesso alle righe, devi utilizzare un filtro TRUE che implichi l'accesso all'intera tabella. Eventuali operazioni che non modificano lo schema della tabella mantengono le eventuali policy di accesso alle righe nella tabella.

Ad esempio, l'istruzione ALTER TABLE RENAME TO copia i criteri di accesso alle righe dalla tabella originale alla nuova tabella. Come altro esempio, l'istruzione TRUNCATE TABLE rimuove tutte le righe da una tabella, ma mantiene lo schema della tabella e tutti i criteri di accesso alle righe.

Job di copia

Per copiare una tabella con uno o più criteri di accesso a livello di riga, devi prima disporre dell'accesso ai filtri TRUE sulla tabella di origine. Anche tutti i criteri di accesso a livello di riga nella tabella di origine vengono copiati nella nuova tabella di destinazione. Se copi una tabella di origine senza criteri di accesso a livello di riga in una tabella di destinazione che li contiene, i criteri di accesso a livello di riga vengono rimossi dalla tabella di destinazione, a meno che non venga utilizzato il flag --append_table o non sia impostato "writeDisposition": "WRITE_APPEND".

Le copie tra regioni sono consentite e tutti i criteri vengono copiati. Le query successive potrebbero essere interrotte al termine della copia se contengono riferimenti alle tabelle invalidi nei criteri delle sottoquery.

I criteri di accesso a livello di riga in una tabella devono avere nomi univoci. Una collisione nei nomi dei criteri di accesso a livello di riga durante la copia genera un errore di input non valido.

Autorizzazioni richieste per copiare una tabella con un criterio di accesso a livello di riga

Per copiare una tabella con uno o più criteri di accesso a livello di riga, devi disporre delle seguenti autorizzazioni, oltre ai ruoli per copiare tabelle e partizioni.

Autorizzazione Risorsa
bigquery.rowAccessPolicies.list La tabella di origine.
bigquery.rowAccessPolicies.getIamPolicy La tabella di origine.
Il filtro TRUE La tabella di origine.
bigquery.rowAccessPolicies.create La tabella di destinazione.
bigquery.rowAccessPolicies.setIamPolicy La tabella di destinazione.

Tabledata.list nell'API BigQuery

Per utilizzare il metodo TRUE nell'API BigQuery su una tabella con criteri di accesso a livello di riga, devi disporre dell'accesso ai filtri tabledata.list.

DML

Per eseguire un'istruzione DML che aggiorna una tabella con criteri di accesso a livello di riga, devi disporre dell'accesso ai filtri TRUE per la tabella.

In particolare, le istruzioni MERGE interagiscono con i criteri di accesso a livello di riga come segue:

  • Se una tabella di destinazione contiene criteri di accesso a livello di riga, devi disporre dell'accesso ai filtri TRUE alla tabella di destinazione.
  • Se una tabella di origine contiene criteri di accesso a livello di riga, l'istruzione MERGE agisce solo sulle righe visibili all'utente.

Snapshot delle tabelle

Gli snapshot delle tabelle supportano la sicurezza a livello di riga. Le autorizzazioni necessarie per la tabella di base (tabella di origine) e per lo snapshot della tabella (tabella di destinazione) sono descritte in Autorizzazioni richieste per copiare una tabella con un criterio di accesso a livello di riga.

Tabella BigQuery con colonne JSON

I criteri di accesso a livello di riga non possono essere applicati alle colonne JSON. Per scoprire di più sulle limitazioni della sicurezza a livello di riga, consulta Limiti.

Grafico di esecuzione

Non puoi utilizzare il grafico di esecuzione delle query per i job con criteri di accesso a livello di riga.

Job di estrazione

Se una tabella ha criteri di accesso a livello di riga, solo i dati che puoi visualizzare vengono esportati in Cloud Storage quando esegui un job di estrazione.

Tabelle partizionate e in cluster

La sicurezza a livello di riga non partecipa al trimming delle query, che è una funzionalità delle tabelle partizionate.

Sebbene la sicurezza a livello di riga sia compatibile con le tabelle partizionate e raggruppate, i criteri di accesso a livello di riga che filtrano i dati delle righe non vengono applicati durante l'eliminazione delle partizioni. Puoi comunque utilizzare l'eliminazione delle partizioni in una tabella che utilizza la sicurezza a livello di riga specificando una clausola WHERE che operi sulla colonna della partizione. Analogamente, i criteri di accesso a livello di riga non offrono alcun vantaggio in termini di prestazioni per le query sulle tabelle clusterizzate, ma non interferiscono con altri filtri applicati.

L'eliminazione delle query viene eseguita durante l'esecuzione dei criteri di accesso a livello di riga utilizzando i filtri con i criteri.

Rinominare una tabella

Non è necessario l'accesso ai filtri TRUE per rinominare una tabella con uno o più criteri di accesso alle righe. Puoi rinominare una tabella con un'istruzione DDL.

In alternativa, puoi anche copiare una tabella e assegnare alla tabella di destinazione un nome diverso. Se la tabella di origine ha un criterio di accesso a livello di riga, consulta i job di copia delle tabelle in questa pagina per ulteriori informazioni.

Aggiornamenti in streaming

Per eseguire operazioni sulle tabelle UPDATE o DELETE in streaming con Change Data Capture, devi disporre dell'accesso al filtro TRUE.

Viaggio nel tempo

Solo un amministratore della tabella può accedere ai dati storici di una tabella che ha o ha avuto in precedenza criteri di accesso a livello di riga. Gli altri utenti ricevono un errore access denied se utilizzano un decoratore di viaggio nel tempo su una tabella che ha avuto accesso a livello di riga. Per ulteriori informazioni, consulta Viaggio nel tempo e accesso a livello di riga.

Viste logiche, materializzate e autorizzate

Questa sezione descrive diversi tipi di visualizzazioni BigQuery e come interagiscono con la sicurezza a livello di riga.

Viste logiche o materializzate

Le viste logiche o materializzate vengono create da query sulle tabelle. I risultati della query sono in genere un sottoinsieme dei dati della tabella.

I dati visualizzati in entrambi i tipi di visualizzazione vengono filtrati in base ai criteri di accesso a livello di riga della tabella di origine sottostante. Tuttavia, non puoi fare riferimento alle viste o alle viste materializzate nei criteri di accesso a livello di riga.

Rendimento per le viste materializzate

Inoltre, quando una vista materializzata è derivata da una tabella sottostante con criteri di accesso a livello di riga, le prestazioni della query sono le stesse di quando esegui una query direttamente sulla tabella di origine. In altre parole, se la tabella di origine ha la sicurezza a livello di riga, non vedrai i vantaggi tipici delle prestazioni dell'esecuzione di query su una vista materializzata rispetto all'esecuzione di query sulla tabella di origine.

Visualizzazioni autorizzate

Puoi anche autorizzare una vista logica o materializzata, ovvero condividerla con utenti o gruppi (principali) specifici. I principali possono quindi eseguire query su una visualizzazione, ma non hanno accesso alla tabella sottostante. Per ulteriori informazioni, consulta Visualizzazioni autorizzate.

Query con caratteri jolly

Le query con caratteri jolly sulle tabelle con criteri di accesso a livello di riga non vanno a buon fine con un errore INVALID_INPUT.

Passaggi successivi