Impatto sulle scritture dal controllo dell'accesso a livello di colonna
Questa pagina spiega l'impatto sulle scritture quando utilizzi BigQuery controllo dell'accesso a livello di colonna per limitare l'accesso ai dati a livello di colonna. Per informazioni generali sul controllo dell'accesso a livello di colonna, consulta Introduzione alle Controllo dell'accesso a livello di colonna di BigQuery.
Il controllo dell'accesso a livello di colonna richiede che un utente disponga dell'autorizzazione di lettura per le colonne sono protetti da tag di criteri. Alcune operazioni di scrittura devono leggere i dati delle colonne prima di scrivere in una colonna. Per queste operazioni, BigQuery controlla se l'utente dispone dell'autorizzazione di lettura per assicurarsi che abbia l'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 a una colonna protetta, l'utente non ha bisogno dell'accesso in lettura colonna. Tuttavia, l'utente che scrive una riga di questo tipo non potrà leggere a meno che l'utente 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 del linguaggio di manipolazione dei dati (DML) di BigQuery
Inserimento dei 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. Ma anche se inserisci correttamente i valori nelle colonne in cui
non dispongono dell'autorizzazione di lettura, una volta inseriti, i valori sono protetti come previsto.
Eliminazione, aggiornamento e unione di dati
Per le istruzioni DELETE
, UPDATE
e MERGE
, BigQuery controlla
per l'autorizzazione Lettore granulare nelle colonne scansionate. Le colonne non sono
scansionati da queste dichiarazioni, a meno che non includi
clausola WHERE
,
o qualche altra clausola o sottoquery che richiede che la query legga i dati.
Caricamento di dati
Durante il caricamento dei dati (ad esempio da Cloud Storage o file locali) in un BigQuery, BigQuery non controlla il lettore granulare sulle 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 nella 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 | |
---|---|---|
Tag di criteri verificati per il 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? | 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 di criteri sono stati controllati per il ruolo Lettore granulare? | Sì | 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 | |
---|---|---|
Tag di criteri verificati per il lettore granulare? | N/D | No |
Colonne selezionate | N/D | user_id credit_score ssn |
Streaming
Non viene controllato nessun tag di criterio durante lo streaming con l'API di streaming insertAll
precedente o con l'API
API StorageWrite. Per l'acquisizione dei dati sulle modifiche di BigQuery, i tag dei 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? | 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 di criteri sono stati controllati per il ruolo 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 |