Impatto sulle scritture dal controllo dell'accesso a livello di colonna

Questa pagina spiega l'impatto sulle scritture quando utilizzi il controllo dell'accesso a livello di colonna BigQuery per limitare l'accesso ai dati a livello di colonna. Per informazioni generali sul controllo dell'accesso a livello di colonna, consulta Introduzione al controllo dell'accesso a livello di colonna BigQuery.

Controllo dell'accesso a livello di colonna richiede che un utente disponga dell'autorizzazione di lettura per le colonne protette dai tag di criteri. Alcune operazioni di scrittura devono leggere i dati della colonna prima di scrivere effettivamente in una colonna. Per queste operazioni, BigQuery controlla l'autorizzazione di lettura dell'utente per assicurarsi che abbia accesso alla colonna. Ad esempio, se un utente aggiorna i dati che includono la scrittura in una colonna protetta, deve disporre dell'autorizzazione di lettura per la colonna protetta. Se l'utente inserisce una nuova riga di dati che include la scrittura in una colonna protetta, non ha bisogno dell'accesso in lettura per la colonna protetta. Tuttavia, l'utente che scrive una riga di questo tipo non potrà leggere i dati appena scritti, a meno che non disponga dell'autorizzazione di lettura per le colonne protette.

Le sezioni seguenti forniscono dettagli sui diversi tipi di operazioni di scrittura. Gli esempi in questo argomento utilizzano tabelle customers con il seguente schema:

Nome campo Tipo Modalità Tag di criteri
user_id STRING REQUIRED policy-tag-1
credit_score INTEGER NULLABLE policy-tag-2
ssn STRING NULLABLE policy-tag-3

Utilizzo data manipulation language (DML) di BigQuery

Inserimento di dati

Per un'istruzione INSERT, BigQuery non controlla l'autorizzazione Lettore granulare per i tag di criteri né nelle colonne sottoposte a scansione né nelle colonne aggiornate. Questo perché un INSERT non richiede la lettura dei dati delle colonne. Tuttavia, anche se inserisci correttamente i valori nelle colonne per le quali non disponi dell'autorizzazione di lettura, una volta inseriti, i valori sono protetti come previsto.

Eliminazione, aggiornamento e unione di dati

Per gli statement DELETE, UPDATE e MERGE, BigQuery controlla la presenza dell'autorizzazione Lettore granulare per le colonne sottoposte a scansione. Le colonne non vengono esaminate da queste istruzioni, a meno che non includa una clausola WHERE o un'altra clausola o sottoquery che richiede alla query di leggere i dati.

Caricamento di dati

Quando carichi i dati (ad esempio da Cloud Storage o da file locali) in una tabella, BigQuery non controlla l'autorizzazione Lettura granulare nelle colonne della tabella di destinazione. Questo perché il caricamento dei dati non richiede la lettura dei contenuti dalla tabella di destinazione.

Il flusso di dati in BigQuery è simile a LOAD e INSERT. BigQuery ti consente di trasmettere flussi di dati in una colonna della tabella di destinazione anche se non disponi dell'autorizzazione Lettore granulare.

Copia di dati

Per un'operazione di copia, BigQuery controlla se l'utente ha l'autorizzazione Lettore granulare per la tabella di origine. BigQuery non controlla se l'utente dispone dell'autorizzazione Lettore granulare per le colonne della tabella di destinazione. Come per LOAD, INSERT e lo streaming, una volta completata la copia, non potrai leggere i dati appena scritti, a meno che tu non disponga dell'autorizzazione Lettura granulare per le colonne della tabella di destinazione.

Esempi di DML

INSERT

Esempio:

INSERT INTO customers VALUES('alice', 85, '123-456-7890');
Colonne di origine Aggiorna colonne
I tag di criteri sono stati controllati per il ruolo Lettore granulare? N/D No
Colonne selezionate N/D user_id
credit_score
ssn

UPDATE

Esempio:

UPDATE customers SET credit_score = 0
  WHERE user_id LIKE 'alice%' AND credit_score < 30
Colonne di origine Aggiorna colonne
I tag di criteri sono stati controllati per il ruolo Lettore granulare? No
Colonne selezionate user_id
credit_score
credit_score

DELETE

Esempio:

DELETE customers WHERE credit_score = 0
Colonne di origine Aggiorna colonne
I tag di criteri sono stati controllati per il ruolo Lettore granulare? No
Colonne selezionate credit_score user_id
credit_score
ssn

Carica esempi

Caricamento da un file locale o da Cloud Storage

Esempio:

load --source_format=CSV samples.customers \
  ./customers_data.csv \
  ./customers_schema.json
Colonne di origine Aggiorna colonne
I tag di criteri sono stati controllati per il ruolo Lettore granulare? N/D No
Colonne selezionate N/D user_id
credit_score
ssn

Streaming

Nessun tag delle norme viene controllato durante lo streaming con l'API di inserimento di flussi insertAll precedente o con l'API Storage Write. Per il monitoraggio delle modifiche dei dati di BigQuery, i tag di criteri vengono controllati nelle colonne della chiave primaria.

Esempi di copia

Aggiunta di dati a una tabella esistente

Esempio:

cp -a samples.customers samples.customers_dest
Colonne di origine Aggiorna colonne
I tag di criteri sono stati controllati per il ruolo Lettore granulare? No
Colonne selezionate customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn

Salvataggio dei risultati della query in una tabella di destinazione

Esempio:

query --use_legacy_sql=false \
--max_rows=0 \
--destination_table samples.customers_dest \
--append_table "SELECT * FROM samples.customers LIMIT 10;"
Colonne di origine Aggiorna colonne
I tag di criteri sono stati controllati per il ruolo Lettore granulare? No
Colonne selezionate customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn