Set di dati autorizzati

Questo documento descrive come utilizzare i set di dati autorizzati in BigQuery. Un set di dati autorizzato consente di autorizzare tutte le visualizzazioni in un set di dati specificato ad accedere ai dati in un secondo set di dati. Con un set di dati autorizzato, non è necessario configurare singole visualizzazioni autorizzate.

Panoramica

Una vista in BigQuery è una tabella virtuale definita da una query SQL. Ad esempio, la query di una vista potrebbe restituire solo un sottoinsieme delle colonne di una tabella, escludendo le colonne che contengono informazioni che consentono l'identificazione personale (PII). Per eseguire query su una vista, un utente deve avere accesso alle risorse a cui accede la query della vista.

Visualizzazioni autorizzate

Se vuoi consentire agli utenti di eseguire query su una vista senza concedere loro l'accesso diretto alle risorse a cui fa riferimento la vista, puoi utilizzare una vista autorizzata. Quando crei una vista autorizzata, puoi condividere una vista logica o una vista materializzata. Quando autorizzi una vista materializzata, questa viene definita vista materializzata autorizzata.

Una vista autorizzata ti consente, ad esempio, di condividere dati più limitati in una vista con gruppi o utenti (principal) specifici, senza concedere ai principal l'accesso a tutti i dati sottostanti. I principal possono visualizzare i dati che condividi ed eseguire query, ma non possono accedere direttamente al set di dati di origine. Al contrario, la visualizzazione autorizzata ha accesso ai dati di origine.

Set di dati autorizzati

Se vuoi concedere a una raccolta di visualizzazioni l'accesso a un set di dati, senza dover autorizzare ogni singola visualizzazione, puoi raggruppare le visualizzazioni in un set di dati e poi concedere al set di dati che contiene le visualizzazioni l'accesso al set di dati che contiene i dati. Puoi quindi concedere ai principal l'accesso al set di dati con il gruppo di visualizzazioni o alle singole visualizzazioni nel set di dati, in base alle esigenze.

Un set di dati che ha accesso a un altro set di dati è chiamato set di dati autorizzato. Il set di dati che autorizza un altro set di dati ad accedere ai suoi dati è chiamato set di dati condiviso.

Autorizzazioni e ruoli richiesti

Per autorizzare un set di dati o revocare la sua autorizzazione, devi disporre delle seguenti autorizzazioni Identity and Access Management (IAM), che ti consentono di aggiornare l'elenco di controllo dell'accesso dell'accesso del set di dati che stai condividendo.

Dopo aver autorizzato un set di dati, puoi creare o aggiornare le viste nel set di dati autorizzato. Per ulteriori informazioni e le autorizzazioni richieste, vedi Creare o aggiornare una vista in un set di dati autorizzato.

Autorizzazione Risorsa
bigquery.datasets.get Il set di dati che stai condividendo.
bigquery.datasets.update Il set di dati che stai condividendo.

I seguenti ruoli IAM predefiniti forniscono le autorizzazioni richieste.

Role Descrizione
bigquery.dataOwner Proprietario dati BigQuery
bigquery.admin Amministratore BigQuery

Quote e limiti

I set di dati autorizzati sono soggetti ai limiti dei set di dati. Per ulteriori informazioni, consulta Limiti dei set di dati.

Autorizzare un set di dati

Puoi autorizzare le viste attuali e future di un set di dati ad accedere a un altro set di dati aggiungendo il set di dati che vuoi autorizzare all'elenco di accesso del set di dati che vuoi condividere, nel seguente modo:

Console

  1. Nella console Google Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto e seleziona il set di dati che contiene i dati che vuoi condividere.

  3. Fai clic sull'icona Azioni e seleziona Apri.

  4. Nel riquadro dei dettagli visualizzato, fai clic su Condivisione e seleziona l'opzione Autorizza dataset.

    Autorizza un set di dati nella console Google Cloud

  5. Nel riquadro Set di dati autorizzato visualizzato, inserisci l'ID set di dati del set di dati che vuoi autorizzare nel seguente formato:

    PROJECT.AUTHORIZED_DATASET

    Ad esempio:

    myProject.myDataset

  6. Fai clic su Aggiungi autorizzazione e poi su Chiudi.

bq

  1. Apri Cloud Shell:

    Vai a Cloud Shell

  2. Scrivi i metadati esistenti (inclusa la lista di controllo dell'accesso) per il set di dati che vuoi condividere in un file JSON utilizzando il comando bq show.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. Utilizza un editor di testo per aggiungere il set di dati che vuoi autorizzare alla sezione access esistente del file JSON creato in FILE_PATH.

    Ad esempio:

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]

  4. Aggiorna il set di dati condiviso utilizzando il comando bq update. Ad esempio:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. Per verificare che il set di dati autorizzato sia stato aggiunto, inserisci di nuovo il comando bq show. Ad esempio:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Recupera i metadati attuali del set di dati che vuoi condividere chiamando il metodo datasets.get, come segue:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    Il corpo della risposta restituisce una risorsa Dataset che contiene i metadati JSON per il set di dati.

  2. Aggiungi il set di dati che vuoi autorizzare alla sezione access dei metadati JSON restituiti nella risorsa Dataset come segue:

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]
  3. Utilizza il metodo datasets.update per aggiornare il set di dati con l'autorizzazione aggiunta:

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    Includi la risorsa Dataset aggiornata nel corpo della richiesta.

  4. Puoi verificare che il set di dati autorizzato sia stato aggiunto chiamando di nuovo il metodo datasets.get.

Revocare l'autorizzazione di un set di dati

Quando elimini un set di dati autorizzato ad accedere a un altro set di dati di origine, possono essere necessarie fino a 24 ore prima che la modifica venga completamente applicata agli elenchi di controllo dell'accesso (ACL) del set di dati di origine. Durante questo periodo:

  • Non potrai accedere ai dati di origine tramite il set di dati eliminato.
  • Il set di dati eliminato potrebbe comunque essere visualizzato nell'elenco di controllo degli accessi e nel conteggio del set di dati di origine ai fini di eventuali limiti del set di dati autorizzato. Ciò potrebbe impedirti di creare nuovi set di dati autorizzati finché la ACL non viene aggiornata.

Per revocare l'accesso concesso alle visualizzazioni in un set di dati autorizzato, rimuovi il set di dati autorizzato dall'elenco di accesso del set di dati condiviso, come segue:

Console

  1. Nella console Google Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto e seleziona il set di dati condiviso.

  3. Fai clic sull'icona Azioni e seleziona Apri.

  4. Nel riquadro dei dettagli visualizzato, fai clic su Condivisione e seleziona l'opzione Autorizza set di dati.

    Autorizza un set di dati nella console Google Cloud

  5. Nel riquadro Set di dati autorizzato visualizzato, trova la voce relativa al set di dati autorizzato nella sezione Set di dati attualmente autorizzati.

  6. Fai clic sull'icona Elimina accanto al set di dati autorizzato che vuoi rimuovere, poi fai clic su Chiudi.

bq

  1. Apri Cloud Shell:

    Vai a Cloud Shell

  2. Scrivi i metadati esistenti (inclusa la lista di controllo dell'accesso) per il set di dati condiviso in un file JSON utilizzando il comando bq show.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. Utilizza un editor di testo per rimuovere il set di dati autorizzato dalla sezione access del file JSON creato in FILE_PATH, come segue:

      {
        "dataset": {
          "dataset": {
            "project_id": "PROJECT",
            "dataset_id": "AUTHORIZED_DATASET"
          },
          "target_types": "VIEWS"
        }
      }
  4. Aggiorna il set di dati condiviso utilizzando il comando bq update. Ad esempio:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. Per verificare che il set di dati autorizzato sia stato rimosso, inserisci di nuovo il comando bq show. Ad esempio:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Recupera i metadati correnti per il set di dati condiviso chiamando il metodo datasets.get, come segue:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    Il corpo della risposta restituisce una risorsa Dataset che contiene i metadati JSON per il set di dati.

  2. Rimuovi il set di dati autorizzato dalla sezione access del JSON restituito nella risorsa Dataset, ad esempio:

     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
  3. Utilizza il metodo datasets.update per aggiornare il set di dati con l'autorizzazione rimossa:

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    Includi la risorsa Dataset aggiornata nel corpo della richiesta.

  4. Puoi verificare che il set di dati autorizzato sia stato rimosso chiamando di nuovo il metodo datasets.get.

Creare o aggiornare una vista in un set di dati autorizzato

Per creare o aggiornare una vista in un set di dati autorizzato, devi disporre delle autorizzazioni per il set di dati condiviso elencate in Autorizzazioni e ruoli richiesti, oltre alle autorizzazioni necessarie per creare o aggiornare una vista in un set di dati standard.

La seguente tabella riassume le autorizzazioni Identity and Access Management (IAM) necessarie per creare o aggiornare una vista che si trova in un set di dati autorizzato:

Autorizzazione Risorsa
bigquery.datasets.get Il set di dati che stai condividendo.
bigquery.tables.getData Qualsiasi tabella o vista del set di dati condiviso a cui viene fatto riferimento nella nuova vista che stai creando o aggiornando.
bigquery.tables.create Il set di dati autorizzato in cui stai creando una vista.
bigquery.tables.update Il set di dati autorizzato in cui stai aggiornando una visualizzazione.

Non hai bisogno di autorizzazioni aggiuntive per eliminare una vista da un set di dati autorizzato.

Eseguire una query su una vista in un set di dati autorizzato

Per eseguire query su una vista in un set di dati autorizzato, un utente deve avere accesso alla vista, ma non è necessario l'accesso al set di dati condiviso.

Per ulteriori informazioni, consulta la sezione Visualizzazioni autorizzate.

Esempio di set di dati autorizzato

Il seguente esempio descrive come creare e utilizzare un set di dati autorizzato.

Supponi di avere due set di dati denominati private_dataset e public_dataset. Il set di dati private_dataset contiene una tabella denominata private_table. Il set di dati public_dataset contiene una vista denominata private_table_filtered. La vista private_table_filtered si basa su una query che restituisce alcuni, ma non tutti, i campi della tabella private_table.

Puoi concedere a un utente l'accesso ai dati restituiti dalla vista private_table_filtered, ma non a tutti i dati della tabella private_table, nel seguente modo:

  1. Concedi all'utente il ruolo bigquery.dataViewer per il set di dati public_dataset. Questo ruolo include l'autorizzazione bigquery.tables.getData, che consente all'utente di eseguire query sulle visualizzazioni nel set di dati public_dataset. Per informazioni su come concedere un ruolo a un utente per un set di dati, vedi Controllare l'accesso ai set di dati.

    L'utente ora dispone dell'autorizzazione per eseguire query sulle visualizzazioni in public_dataset, ma non può ancora accedere alla tabella private_table in private_dataset. Se l'utente tenta di eseguire query sulla tabella private_table direttamente o se tenta di accedere alla tabella private_table indirettamente eseguendo query sulla visualizzazione private_table_filtered, riceve un messaggio di errore simile al seguente:

    Access Denied: Table PROJECT:private_dataset.private_table: User does not have permission to query table PROJECT:private_dataset.private_table.

  2. Nella pagina BigQuery della console Google Cloud , apri il set di datiprivate_dataset, fai clic su Condivisione e poi seleziona Autorizza set di dati.

  3. Nel riquadro Set di dati autorizzato visualizzato, inserisci PROJECT.public_dataset nel campo ID set di dati, quindi fai clic su Aggiungi autorizzazione.

    Il set di dati public_dataset viene aggiunto all'elenco di controllo dell'accesso del set di dati private_dataset, autorizzando le visualizzazioni nel set di dati public_dataset a eseguire query sui dati nel set di dati private_dataset.

    L'utente ora può eseguire query sulla vista private_table_filtered nel set di dati public_dataset, che accede indirettamente al set di dati private_dataset, senza disporre di autorizzazioni per accedere direttamente ai dati nel set di dati private_dataset.

Limitazioni

  • Puoi creare set di dati autorizzati in regioni diverse, ma BigQuery non supporta le query tra regioni. Pertanto, ti consigliamo di creare set di dati nella stessa regione.

Passaggi successivi

  • Per informazioni sull'autorizzazione di una singola visualizzazione ad accedere ai dati in un set di dati, vedi Viste autorizzate.

  • Per informazioni sull'autorizzazione di una funzione di tabella o di una funzione definita dall'utente dall'utente per accedere ai dati in un set di dati, consulta Funzioni autorizzate.