Visualizzazioni autorizzate e viste materializzate
Questo documento descrive come creare viste autorizzate e viste materializzate in in BigQuery.
Le viste autorizzate e quelle materializzate autorizzate ti consentono di condividere i risultati delle query con determinati utenti e gruppi senza concedere loro l'accesso ai i dati di origine. Alla vista o vista materializzata viene concesso l'accesso ai dati, anziché all'utente. Puoi anche utilizzare la query SQL che crea la vista vista materializzata per limitare le colonne e i campi che gli utenti possono query.
Quando si effettua una vista autorizzata o una vista materializzata in un altro set di dati, il set di dati dei dati di origine e quello della vista autorizzata devono trovarsi nella stessa regione location.
Per informazioni su come autorizzare tutte le viste in un set di dati, anziché l'autorizzazione di singole viste, Set di dati autorizzati.
Prima di iniziare
Concede ruoli IAM (Identity and Access Management) che concedono agli utenti le autorizzazioni necessarie per eseguire ciascuna attività in questo documento.
Autorizzazioni obbligatorie
Per creare o aggiornare una vista autorizzata, devi disporre delle autorizzazioni per il set di dati contiene la vista e il set di dati che le fornisce.
Autorizzazioni sul set di dati che contiene la vista
Le viste vengono trattate come risorse di tabella in BigQuery, quindi la creazione di un richiede le stesse autorizzazioni della creazione di una tabella. Devi inoltre disporre delle autorizzazioni per eseguire query su tutte le tabelle a cui fa riferimento la query SQL della vista.
Per creare una vista, devi disporre di IAM bigquery.tables.create
autorizzazione. Il ruolo IAM predefinito roles/bigquery.dataEditor
include le autorizzazioni necessarie per creare una vista.
Inoltre, se disponi dell'autorizzazione bigquery.datasets.create
, puoi
e creare viste nei set di dati da te creati. Per creare una vista per i dati che
non sono proprietari, devi disporre dell'autorizzazione bigquery.tables.getData
per la tabella.
Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, vedi Ruoli e ruoli predefiniti autorizzazioni.
Autorizzazioni sul set di dati che consente l'accesso alla vista
Per aggiornare le proprietà del set di dati, devi disporre delle seguenti autorizzazioni IAM:
bigquery.datasets.update
bigquery.datasets.setIamPolicy
(richiesto solo durante l'aggiornamento dell'accesso al set di dati) nella console Google Cloud)
Il ruolo IAM predefinito roles/bigquery.dataOwner
include le autorizzazioni necessarie per aggiornare le proprietà del set di dati.
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, vedi Autorizzazioni e ruoli predefiniti.
Autorizzare una visualizzazione
Per concedere l'accesso in visualizzazione a un set di dati:
Console
Vai alla pagina BigQuery nella console Google Cloud.
Nel riquadro Explorer, espandi il progetto e seleziona un set di dati.
Clic
Visualizza le azioni e fai clic su Apri.Nel riquadro Informazioni sul set di dati, fai clic su
Condivisione e seleziona Autorizza visualizzazioni.In Autorizza vista, digita il nome della vista da autorizzare.
Fai clic su Aggiungi autorizzazione.
Fai clic su Chiudi.
bq
Scrivi le informazioni esistenti del set di dati (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 rispetto al progetto predefinito, aggiungi l'ID progetto al nome del set di dati nella 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 set di dati.
- path_to_file è il percorso del file JSON sul tuo computer in una macchina virtuale.
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 seguente comando per scrivere i controlli di accesso per
mydataset
in un file JSON.mydataset
è amyotherproject
.bq show --format=prettyjson \ myotherproject:mydataset > /tmp/mydataset.json
Aggiungi la vista autorizzata all'accesso del file JSON.
Ad esempio, la sezione di accesso del file JSON di un set di dati potrebbe essere le seguenti:
{ "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]" } } ], }
Al termine delle 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 rispetto al progetto predefinito, aggiungi l'ID progetto al nome del set di dati nella nel seguente formato:project_id:dataset
.bq update \ --source path_to_file \ project_id:dataset
Dove:
- path_to_file è il percorso del file JSON sul computer locale.
- project_id è l'ID progetto.
- dataset è il nome del tuo set di dati.
Esempi:
Inserisci il comando seguente per aggiornare i controlli dell'accesso per
mydataset
.mydataset
è nel tuo progetto predefinito.bq update --source /tmp/mydataset.json mydataset
Inserisci il comando seguente per aggiornare i controlli dell'accesso per
mydataset
.mydataset
si trova inmyotherproject
.bq update --source /tmp/mydataset.json myotherproject:mydataset
Per verificare le modifiche apportate al controllo dell'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 il datasets.patch
e utilizza la proprietà access
per aggiornare i controlli di accesso. Per
per saperne di più, consulta Set di dati.
Poiché il metodo datasets.update
sostituisce l'intera risorsa del set di dati,
datasets.patch
è il metodo preferito per l'aggiornamento dei controlli dell'accesso.
Vai
Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Go BigQuery documentazione di riferimento.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Java
Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Rimuovere l'autorizzazione per una visualizzazione
Per rimuovere l'autorizzazione a una vista:
Console
Vai alla pagina BigQuery nella console Google Cloud.
Nel riquadro Explorer, espandi il progetto e seleziona un set di dati.
Fai clic su > Autorizza visualizzazioni.
CondivisioneFai clic su
Rimuovi autorizzazione.Fai clic su Chiudi.
Quote e limiti
- Le visualizzazioni autorizzate sono soggette a limiti di set di dati. Per ulteriori informazioni, vedi Limiti dei set di dati.
- Se rimuovi una visualizzazione autorizzata, possono essere necessarie fino a 24 ore prima che tutti i riferimenti alla visualizzazione vengano rimossi dal sistema. Per evitare errori, attendi 24 ore prima di riutilizzare il nome di una visualizzazione rimossa o crea un nome univoco per la visualizzazione.
Imporre l'accesso a livello di riga con una visualizzazione
Le viste possono essere utilizzate per limitare l'accesso a colonne (campi) specifici. Se vuoi
per limitare l'accesso alle singole righe della tabella, non è necessario creare
viste separate per ogni utente o gruppo. In alternativa, puoi utilizzare l'SESSION_USER()
per restituire l'indirizzo email dell'utente corrente.
Per mostrare righe diverse a utenti diversi, aggiungi un altro campo alla tabella
contenente l'utente autorizzato a visualizzare la riga. Poi, crea una vista che utilizzi
la funzione SESSION_USER()
. Nell'esempio seguente, i nomi utente sono
archiviata nel campo allowed_viewer
:
SELECT COLUMN_1, COLUMN_2 FROM `dataset.view` WHERE allowed_viewer = SESSION_USER()
Il limite di questo approccio è che puoi concedere l'accesso a un solo
un utente alla volta. Puoi ovviare a questo limite rendendo allowed_viewer
un campo ripetuto. Questo approccio ti consente di fornire un elenco di utenti per ogni riga.
Ma anche se utilizzi un campo ripetuto, l'archiviazione dei nomi utente nella tabella
richiede di monitorare manualmente i singoli utenti che hanno accesso a ogni
riga di comando.
Compila invece il campo allowed_viewer
con i nomi dei gruppi e crea un
una tabella separata che mappa i gruppi agli utenti. La tabella che mappa i gruppi agli utenti
avrà uno schema che archivia i nomi e i nomi utente dei gruppi. Ad esempio:
{group:string, user_name:string}
. Questo approccio ti consente di gestire
e raggruppa le informazioni separatamente dalla tabella che li contiene.
Se la tabella di mappatura è denominata
private.access_control
, la query SQL utilizzata per creare la vista autorizzata
potrebbe essere:
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 Crea una vista autorizzata.
- Per informazioni sulla creazione delle viste, consulta la sezione Creare viste.
- Per informazioni sulla creazione di viste materializzate, consulta Creare viste materializzate.
- Per informazioni su come ottenere i metadati delle viste, consulta Informazioni sulle viste.
- Per ulteriori informazioni sulla gestione delle visualizzazioni, consulta la sezione Gestione delle visualizzazioni.
- Per informazioni su come autorizzare tutte le visualizzazioni in un set di dati, consulta Set di dati autorizzati.