Impatto sulle operazioni di scrittura del 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 sulcontrollo dell'accessoo 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 delle colonne 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 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 policy |
|---|---|---|---|
user_id |
STRING | REQUIRED | policy-tag-1 |
credit_score |
INTEGER | NULLABLE | policy-tag-2 |
ssn |
STRING | NULLABLE | policy-tag-3 |
Utilizzo di DML (Data Manipulation Language) di BigQuery
Inserimento dei dati
Per un'istruzione INSERT, BigQuery non controlla l'autorizzazione Lettore granulare sui tag di criteri nelle colonne analizzate o in quelle aggiornate. Questo perché un INSERT non richiede la lettura dei dati delle colonne. Tuttavia, anche se inserisci correttamente i valori nelle colonne per cui non disponi dell'autorizzazione di lettura, una volta inseriti, i valori vengono protetti come previsto.
Eliminazione, aggiornamento e unione dei dati
Per le istruzioni DELETE, UPDATE e MERGE, BigQuery verifica
l'autorizzazione Fine-Grained Reader sulle colonne scansionate. Le colonne non vengono
scansionate da queste istruzioni, a meno che tu non includa una
clausola WHERE,
o un'altra clausola o sottoquery che richieda 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 Lettore granulare sulle colonne della tabella di destinazione. Questo perché il caricamento dei dati non richiede la lettura dei contenuti dalla tabella di destinazione.
L'inserimento di flussi di dati in BigQuery è simile a LOAD e INSERT.
BigQuery ti consente di trasmettere dati in una colonna della tabella di destinazione, anche se non disponi dell'autorizzazione di lettura granulare.
Copia di dati
Per un'operazione di copia, BigQuery verifica se l'utente dispone
dell'autorizzazione Lettore granulare sulla 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 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 di criteri sono stati controllati per il ruolo Lettore granulare? | N/D | No |
| Colonne selezionate | N/D | user_idcredit_scoressn |
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_idcredit_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_idcredit_scoressn |
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_idcredit_scoressn |
Streaming
Non vengono selezionati tag dei criteri durante lo streaming con l'API di streaming insertAll legacy o l'API Storage Write. Per l'importazione di Change Data Capture di BigQuery, i tag di policy vengono controllati nelle colonne della chiave primaria.
Esempi di testo pubblicitario
Aggiungere 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_idcustomers.credit_scorecustomers.ssn |
customers_dest.user_idcustomers_dest.credit_scorecustomers_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_idcustomers.credit_scorecustomers.ssn |
customers_dest.user_idcustomers_dest.credit_scorecustomers_dest.ssn |