Impatto sulle scritture generate dal controllo dell'accesso a livello di colonna
Questa pagina descrive l'impatto sulle scritture quando utilizzi il controllo dell'accesso a livello di colonna di 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 di 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 scriverli. Per queste operazioni, BigQuery controlla l'autorizzazione di lettura dell'utente per verificare che abbia accesso alla colonna. Ad esempio, se un utente aggiorna dati che includono la scrittura in una colonna protetta, l'utente 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 seguenti sezioni forniscono dettagli sui diversi tipi di operazioni di scrittura. Gli esempi in questo argomento utilizzano le tabelle customers
con il seguente schema:
Nome campo | Tipo | Modalità | Tag criterio |
---|---|---|---|
user_id |
STRINGA | OBBLIGATORIO | policy-tag-1 |
credit_score |
INTERO | AMMETTE VALORI NULL | policy-tag-2 |
ssn |
STRINGA | AMMETTE VALORI NULL | policy-tag-3 |
Utilizzo di Data Manipulation Language (DML) di BigQuery
Inserimento dei dati
Per un'istruzione INSERT
, BigQuery non controlla l'autorizzazione
Lettore granulare per i tag di criteri nelle colonne analizzate o
nelle colonne aggiornate. Il motivo è che un INSERT
non richiede la lettura dei
dati della colonna. Tuttavia, anche se inserisci correttamente i valori in colonne in cui non disponi dell'autorizzazione di lettura, una volta inseriti, i valori sono protetti come previsto.
Eliminazione, aggiornamento e unione dei dati
Per le istruzioni DELETE
, UPDATE
e MERGE
, BigQuery controlla
l'autorizzazione Lettore granulare sulle colonne analizzate. Le colonne non vengono analizzate da queste istruzioni a meno che tu non includa una clausola WHERE
o qualche altra clausola o sottoquery che richieda alla query di leggere i dati.
Caricamento dei dati
Durante il caricamento dei dati (ad esempio da Cloud Storage o file locali) in una tabella, BigQuery non controlla l'autorizzazione di lettura granulare sulle colonne della tabella di destinazione. Questo perché il caricamento dei dati non richiede la lettura dei contenuti dalla tabella di destinazione.
I flussi di dati in BigQuery sono simili a quelli di LOAD
e INSERT
.
BigQuery consente di inserire 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 dispone dell'autorizzazione Lettore granulare nella tabella di origine. BigQuery non verifica se l'utente dispone dell'autorizzazione Lettore granulare per le colonne della tabella di destinazione. Come LOAD
, INSERT
e streaming, una volta completata la copia, non potrai leggere i dati appena scritti, a meno che tu non disponga dell'autorizzazione Lettore 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 criterio sono stati controllati per il Lettore granulare? | N/A | No |
Colonne selezionate | N/A | 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 criterio sono stati controllati per il Lettore granulare? | Sì | No |
Colonne selezionate | user_id credit_score |
credit_score |
DELETE
Esempio:
DELETE customers WHERE credit_score = 0
Colonne di origine | Aggiorna colonne | |
---|---|---|
I tag criterio sono stati controllati per il Lettore granulare? | Sì | No |
Colonne selezionate | credit_score |
user_id credit_score ssn |
Carica esempi
Caricamento da un file locale o Cloud Storage
Esempio:
load --source_format=CSV samples.customers \
./customers_data.csv \
./customers_schema.json
Colonne di origine | Aggiorna colonne | |
---|---|---|
I tag criterio sono stati controllati per il Lettore granulare? | N/A | No |
Colonne selezionate | N/A | user_id credit_score ssn |
Flussi di dati
Nessun tag criterio viene controllato durante il flusso di dati con l'API di streaming insertAll
legacy o l'API Storage Write. Per l'acquisizione dei dati delle modifiche di BigQuery, i tag di criteri vengono controllati nelle colonne della chiave primaria.
Copia esempi
Aggiunta di dati a una tabella esistente
Esempio:
cp -a samples.customers samples.customers_dest
Colonne di origine | Aggiorna colonne | |
---|---|---|
I tag criterio sono stati controllati per il Lettore granulare? | Sì | 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 criterio sono stati controllati per il Lettore granulare? | Sì | No |
Colonne selezionate | customers.user_id customers.credit_score customers.ssn |
customers_dest.user_id customers_dest.credit_score customers_dest.ssn |