Visualizzazioni autorizzate
Questo documento descrive come creare viste autorizzate in BigQuery.
Puoi creare una vista autorizzata in BigQuery mediante:
- Su Google Cloud Console.
- Utilizzando il comando
bq update
. - Chiamata al metodo API
tables.patch
. - Utilizzo delle librerie client.
Panoramica
Una visualizzazione autorizzata ti consente di condividere i risultati delle query con utenti e gruppi specifici senza concedere loro l'accesso ai dati di origine sottostanti. Puoi anche utilizzare la query SQL view's per limitare le colonne (campi) su cui gli utenti possono eseguire query.
Quando crei una vista autorizzata in un altro set di dati, sia il set di dati di origine che il set di dati di visualizzazione autorizzato devono trovarsi nella stessa località a livello di area geografica.
Per un tutorial sulla creazione di una vista autorizzata, consulta Creare una vista autorizzata.
Per informazioni sull'autorizzazione di tutte le viste in un set di dati, anziché sull'autorizzazione di singole viste, consulta Autorizzati set di dati.
Prima di iniziare
Concedi ruoli IAM (Identity and Access Management) che consentono agli utenti le autorizzazioni necessarie per eseguire ogni attività in questo documento.
Autorizzazioni obbligatorie
Per creare o aggiornare una vista autorizzata, devi disporre delle autorizzazioni per il set di dati che la contiene e per il set di dati che fornisce accesso alla vista.
Autorizzazioni per il set di dati che contiene la vista
Le viste sono trattate come risorse di tabella in BigQuery, pertanto la creazione di una vista richiede le stesse autorizzazioni della creazione di una tabella. Devi disporre anche delle autorizzazioni per eseguire query su qualsiasi tabella a cui fa riferimento la query SQL di view.
Per creare una vista, devi disporre dell'autorizzazione IAM bigquery.tables.create
.
Ciascuno dei seguenti ruoli IAM predefiniti include le autorizzazioni necessarie per creare una vista:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
Inoltre, se disponi dell'autorizzazione bigquery.datasets.create
, puoi creare viste nei set di dati che crei. Per creare una vista per i dati di cui non sei proprietario, devi disporre dell'autorizzazione bigquery.jobs.create
per la tabella.
Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, consulta la sezione Ruoli e autorizzazioni predefiniti.
Autorizzazioni sul set di dati che fornisce accesso alla vista
Per aggiornare le proprietà del set di dati, devi disporre delle seguenti autorizzazioni IAM:
bigquery.datasets.update
bigquery.datasets.get
Ciascuno dei seguenti ruoli IAM predefiniti include le autorizzazioni necessarie per aggiornare le proprietà del set di dati:
roles/bigquery.dataOwner
roles/bigquery.admin
Inoltre, se disponi dell'autorizzazione bigquery.datasets.create
, puoi aggiornare le proprietà dei set di dati che crei.
Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, consulta la sezione Ruoli e autorizzazioni predefiniti.
Autorizzare una vista
Per concedere una visualizzazione dell'accesso a un set di dati:
console
Nel riquadro Explorer, espandi il progetto e seleziona un set di dati.
Espandi l'opzione
Azioni e fai clic su Apri.Nel riquadro dei dettagli, fai clic su Condividi set di dati.
Nel riquadro Autorizzazioni set di dati, seleziona la scheda Viste autorizzate.
Nella sezione Condividi visualizzazione autorizzata:
- In Seleziona progetto, verifica il nome del progetto. Se la vista appartiene a un altro progetto, selezionala.
- Per Seleziona set di dati, scegli il set di dati che contiene la vista.
- Per Seleziona vista, seleziona la vista che vuoi autorizzare.
Fai clic su Aggiungi, quindi su Fine.
bq
Scrivere le informazioni del set di dati esistente (inclusi i controlli di accesso) in un file JSON utilizzando il comando
bq show
. Se il set di dati si trova in un progetto diverso da quello predefinito, aggiungi l'ID progetto al nome del set di dati nel seguente formato:project_id:dataset
.bq show \ --format=prettyjson \ project_id:dataset > path_to_file
Dove:
- project_id è l'ID progetto.
- dataset è il nome del tuo set di dati.
- path_to_file è il percorso del file JSON sulla tua macchina locale.
Esempi:
Inserisci il comando seguente per scrivere i controlli di accesso per
mydataset
in un file JSON.mydataset
è nel tuo progetto predefinito.bq show --format=prettyjson mydataset > /tmp/mydataset.json
Inserisci il comando seguente per scrivere i controlli di accesso per
mydataset
in un file JSON.mydataset
si trova amyotherproject
.bq show --format=prettyjson \ myotherproject:mydataset > /tmp/mydataset.json
Aggiungi la visualizzazione autorizzata alla sezione "accesso" del file JSON.
Ad esempio, la sezione dell'accesso al file JSON di un set di dati sarebbe simile alla seguente:
{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" } { "role": "READER", "specialGroup": "allAuthenticatedUsers" } { "role": "READER", "domain": "[DOMAIN_NAME]" } { "role": "WRITER", "userByEmail": "[USER_EMAIL]" } { "role": "READER", "groupByEmail": "[GROUP_EMAIL]" }, { "view":{ "datasetId": "[DATASET_NAME]", "projectId": "[PROJECT_NAME]", "tableId": "[VIEW_NAME]" } } ], }
Una volta completate le modifiche, utilizza il comando
bq update
e includi il file JSON utilizzando il flag--source
. Se il set di dati si trova in un progetto diverso da quello predefinito, aggiungi l'ID progetto al nome del set di dati nel seguente formato:project_id:dataset
.bq update \ --source path_to_file \ project_id:dataset
Dove:
- path_to_file è il percorso del file JSON sulla tua macchina locale.
- project_id è l'ID progetto.
- dataset è il nome del tuo set di dati.
Esempi:
Inserisci il comando seguente per aggiornare i controlli di accesso per
mydataset
.mydataset
è nel tuo progetto predefinito.bq update --source /tmp/mydataset.json mydataset
Inserisci il comando seguente per aggiornare i controlli di accesso per
mydataset
.mydataset
si trova amyotherproject
.bq update --source /tmp/mydataset.json myotherproject:mydataset
Per verificare le modifiche al controllo di accesso, inserisci di nuovo il comando
show
senza scrivere le informazioni in un file.bq show --format=prettyjson [DATASET]
o
bq show --format=prettyjson [PROJECT_ID]:[DATASET]
API
Chiama la datasets.patch
e utilizza la proprietà access
per aggiornare i controlli di accesso. Per ulteriori informazioni, consulta la sezione Set di dati.
Poiché il metodo datasets.update
sostituisce l'intera risorsa del set di dati,
datasets.patch
è il metodo preferito per aggiornare i controlli di accesso.
Go
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nella guida rapida di BigQuery che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella Guida di BigQuery per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery che utilizza le librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python BigQuery.
Applicare l'accesso a livello di riga con una vista
Le viste possono essere utilizzate per limitare l'accesso a determinate colonne (campi). Se vuoi limitare l'accesso a singole righe della tabella, non devi creare viste distinte per ogni utente o gruppo. Puoi invece utilizzare la funzione SESSION_USER()
per restituire l'indirizzo email dell'utente corrente.
Per mostrare righe diverse a utenti differenti, aggiungi un altro campo alla tabella che contenga l'utente autorizzato a visualizzare la riga. A questo punto, crea una vista che utilizzi la funzione SESSION_USER()
. Nel seguente esempio, i nomi utente vengono memorizzati nel campo allowed_viewer
:
SELECT COLUMN_1, COLUMN_2 FROM `dataset.view` WHERE allowed_viewer = SESSION_USER()
La limitazione di questo approccio consiste nel fatto che puoi concedere l'accesso a un solo utente alla volta. Puoi aggirare questo limite rendendo allowed_viewer
un campo ripetuto. Questo approccio ti consente di fornire un elenco di utenti per ogni riga.
Tuttavia, anche se utilizzi un campo ripetuto, per archiviare i nomi utente nella tabella devi comunque monitorare manualmente i singoli utenti che hanno accesso a ogni riga.
Compila invece il campo allowed_viewer
con i nomi dei gruppi e crea una tabella separata che mappa i gruppi agli utenti. La tabella che mappa i gruppi agli utenti avrebbe uno schema che memorizza i nomi e i nomi utente dei gruppi. Ad esempio:
{group:string, user_name:string}
. Questo approccio ti consente di gestire le informazioni sugli utenti e sui gruppi separatamente dalla tabella che contiene i dati.
Se la tabella di mappatura è denominata
private.access_control
, la query SQL utilizzata per creare la vista autorizzata sarebbe:
SELECT c.customer, c.id FROM `private.customers` c INNER JOIN ( SELECT group FROM `private.access_control` WHERE SESSION_USER() = user_name) g ON c.allowed_group = g.group
Passaggi successivi
- Per un tutorial sulla creazione di una vista autorizzata, consulta Creare una vista autorizzata.
- Per informazioni sulla creazione delle viste, consulta Creazione delle viste.
- Per informazioni sulle visualizzazioni delle schede, vedi Viste elencate.
- Per informazioni su come ottenere i metadati delle viste, consulta Ottenere informazioni sulle viste.
- Per informazioni sull'aggiornamento delle viste, consulta Aggiornamento delle viste.
- Per ulteriori informazioni sulla gestione delle visualizzazioni, consulta Gestire le viste.
- Per informazioni sull'autorizzazione di tutte le viste in un set di dati, consulta Set di dati autorizzati.