Conjuntos de dados autorizados

Neste documento, você verá como usar conjuntos de dados autorizados no BigQuery. Com um conjunto de dados autorizado, você pode autorizar todas as visualizações em um conjunto de dados especificado a acessar os dados em um segundo conjunto de dados. Com um conjunto de dados autorizado, você não precisa configurar visualizações autorizadas individuais.

É possível criar um conjunto de dados autorizado no BigQuery usando o seguinte:

Visão geral

Uma visualização no BigQuery é uma tabela virtual definida por uma consulta SQL. Por exemplo, a consulta de uma visualização pode retornar somente um subconjunto das colunas de uma tabela, excluindo colunas com informações de identificação pessoal (PII). Para consultar uma visualização, o usuário precisa ter acesso aos recursos acessados pela consulta da visualização.

Se você quiser permitir que os usuários consultem uma visualização sem conceder acesso direto aos recursos referenciados por ela, use uma visualização autorizada. Uma visualização autorizada permite, por exemplo, compartilhar dados mais limitados em uma visualização com grupos ou usuários especificados (principais), sem conceder ao principal acesso a todos os dados subjacentes. Para isso, conceda aos principais acesso à visualização e à visualização ao conjunto de dados que contém os dados subjacentes.

Para conceder a uma coleção de acesso a um conjunto de dados, sem precisar autorizar cada visualização individual, é possível agrupar as visualizações em um conjunto de dados e fornecer o conjunto de dados a seguir. que contém o acesso de visualizações ao conjunto de dados que contém os dados. É possível conceder acesso aos principais ao conjunto de dados com o grupo de visualizações ou a visualizações individuais no conjunto de dados, conforme necessário. Um conjunto de dados que tem acesso a outro conjunto de dados é chamado de conjunto de dados autorizado. O conjunto de dados que autoriza outro conjunto de dados a acessar os dados é chamado de conjunto de dados compartilhado.

Permissões e papéis obrigatórios

Para autorizar um conjunto de dados ou revogar a autorização de um conjunto de dados, são necessárias as seguintes permissões do Identity and Access Management (IAM), que permitem atualizar a lista de controle de acesso no conjunto de dados que você está compartilhando.

Depois que um conjunto de dados é autorizado, você precisa dessas mesmas permissões caso queira criar ou atualizar visualizações nesse conjunto. Para mais informações, consulte Criar ou atualizar uma visualização em um conjunto de dados autorizado.

Permissão Recurso
bigquery.datasets.get O conjunto de dados que você está compartilhando.
bigquery.datasets.update O conjunto de dados que você está compartilhando.

Os papéis de IAM predefinidos a seguir fornecem as permissões necessárias.

Papel Descrição
bigquery.dataOwner Proprietário de dados do BigQuery
bigquery.admin Administrador do BigQuery

Cotas e limites

Os conjuntos de dados autorizados estão sujeitos aos limites de conjuntos de dados. Para mais informações, consulte Limites do conjunto de dados.

Autorizar um conjunto de dados

Para autorizar as visualizações atuais e futuras de um conjunto de dados a acessar outro conjunto de dados, adicione o conjunto de dados que você quer autorizar à lista de acesso do conjunto de dados que você quer compartilhar da seguinte maneira:

Console

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No painel Explorer, expanda seu projeto e selecione o conjunto de dados que contém os dados que você quer compartilhar.

  3. Clique no ícone Ações e selecione Abrir.

  4. No painel de detalhes exibido, clique em Compartilhamento e selecione a opção Autorizar conjuntos de dados.

    Autorizar um conjunto de dados

  5. No painel Conjunto de dados autorizado exibido, insira o ID do conjunto de dados que você quer autorizar no seguinte formato:

    PROJECT.AUTHORIZED_DATASET

    Por exemplo:

    myProject.myDataset

  6. Clique em Add Authorization e depois em Close.

bq

  1. Abra o Cloud Shell:

    Acessar o Cloud Shell

  2. Use o comando bq show para gravar os metadados existentes, incluindo a lista de controle de acesso, do conjunto de dados que você quer compartilhar em um arquivo JSON.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. Use um editor de texto para adicionar o conjunto de dados que você quer autorizar na seção access existente do arquivo JSON criado em FILE_PATH.

    Por exemplo:

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

  4. Atualize o conjunto de dados compartilhado usando o comando bq update. Por exemplo:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. Para verificar se o conjunto de dados autorizado foi adicionado, insira o comando bq show novamente. Por exemplo:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Consiga os metadados atuais para o conjunto de dados que você quer compartilhar chamando o método datasets.get da seguinte maneira:

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

    O corpo da resposta retorna um recurso Dataset que contém metadados JSON para o conjunto de dados.

  2. Adicione o conjunto de dados que você quer autorizar à seção access dos metadados JSON retornados no recurso Dataset da seguinte maneira:

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]
  3. Use o método datasets.update para atualizar o conjunto de dados com a autorização adicionada:

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

    Inclua o recurso Dataset atualizado no corpo da solicitação.

  4. Verifique se o conjunto de dados autorizado foi adicionado chamando o método datasets.get novamente.

Revogar a autorização de um conjunto de dados

Quando você exclui um conjunto de dados autorizado a acessar outro conjunto de dados de origem, pode levar até 24 horas para que a alteração seja totalmente refletida nas listas de controle de acesso (ACLs) do conjunto de dados de origem. Durante esse período:

  • Não será possível acessar os dados de origem por meio do conjunto de dados excluído.
  • O conjunto de dados excluído ainda pode aparecer na ACL do conjunto de dados de origem e ser contabilizado nos limites autorizados. Isso pode impedir a criação de novos conjuntos de dados autorizados até que a ACL seja atualizada.

Para revogar o acesso concedido às visualizações em um conjunto de dados autorizado, remova o conjunto de dados autorizado da lista de acesso do conjunto de dados compartilhado da seguinte maneira:

Console

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No painel Explorer, expanda seu projeto e selecione o conjunto de dados compartilhado.

  3. Clique no ícone Ações e selecione Abrir.

  4. No painel de detalhes exibido, clique em Compartilhamento e selecione a opção Autorizar conjuntos de dados.

    Autorizar um conjunto de dados

  5. No painel Conjunto de dados autorizado, localize a entrada para o conjunto de dados autorizado na seção Conjuntos de dados autorizados.

  6. Clique no ícone de exclusão ao lado do conjunto de dados autorizado que você quer remover e, em seguida, clique em Fechar.

bq

  1. Abra o Cloud Shell:

    Acesse o Cloud Shell

  2. Use o comando bq show para gravar os metadados existentes (incluindo a lista de controle de acesso) do conjunto de dados compartilhado em um arquivo JSON.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. Use um editor de texto para remover o conjunto de dados autorizado da seção access do arquivo JSON criado em FILE_PATH da seguinte maneira:

      {
        "dataset": {
          "dataset": {
            "project_id": "PROJECT",
            "dataset_id": "AUTHORIZED_DATASET"
          },
          "target_types": "VIEWS"
        }
      }
  4. Atualize o conjunto de dados compartilhado usando o comando bq update. Por exemplo:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. Para verificar se o conjunto de dados autorizado foi removido, insira o comando bq show novamente. Por exemplo:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Para ver os metadados atuais do conjunto de dados compartilhado, chame o método datasets.get da seguinte maneira:

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

    O corpo da resposta retorna um recurso Dataset que contém metadados JSON para o conjunto de dados.

  2. Remova o conjunto de dados autorizado da seção access do JSON retornado no recurso Dataset. Por exemplo:

     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
  3. Use o método datasets.update para atualizar o conjunto de dados com a autorização removida:

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

    Inclua o recurso Dataset atualizado no corpo da solicitação.

  4. É possível verificar se o conjunto de dados autorizado foi removido chamando o método datasets.get novamente.

Criar ou atualizar uma visualização em um conjunto de dados autorizado

Para criar ou atualizar uma visualização que está em um conjunto de dados autorizado, você precisa ter as permissões do conjunto de dados compartilhado listadas em Permissões e papéis necessários, além das permissões necessárias para create ou atualizar uma visualização em um conjunto de dados padrão.

Veja na tabela a seguir um resumo das permissões do Identity and Access Management (IAM) necessárias para criar ou atualizar uma visualização que está em um conjunto de dados autorizado:

Permissão Recurso
bigquery.datasets.get O conjunto de dados que você está compartilhando.
bigquery.datasets.update O conjunto de dados que você está compartilhando.
bigquery.tables.getData Todas as tabelas ou visualizações do conjunto de dados compartilhado que são referenciadas na nova visualização que você está criando ou atualizando.
bigquery.tables.create O conjunto de dados autorizado em que você está criando uma visualização.
bigquery.tables.update O conjunto de dados autorizado em que você está atualizando uma visualização.

Você não precisa de nenhuma outra permissão para excluir uma visualização de um conjunto de dados autorizado.

Consultar uma visualização em um conjunto de dados autorizado

Para consultar uma visualização em um conjunto de dados autorizado, o usuário precisa ter acesso à visualização, mas não ao conjunto de dados compartilhado.

Para mais informações, consulte Visualizações autorizadas.

Exemplo de conjunto de dados autorizado

O exemplo a seguir descreve como criar e usar um conjunto de dados autorizado.

Suponha que você tenha dois conjuntos de dados, denominados private_dataset e public_dataset. O conjunto de dados private_dataset contém uma tabela chamada private_table. O conjunto de dados public_dataset contém uma visualização chamada private_table_filtered. A visualização private_table_filtered é baseada em uma consulta que retorna alguns dos campos na tabela private_table, mas não todos.

É possível conceder ao usuário acesso aos dados retornados pela visualização private_table_filtered, mas não a todos os dados na tabela private_table, da seguinte maneira:

  1. Conceda ao usuário o papel bigquery.dataViewer para o conjunto de dados public_dataset. Esse papel inclui a permissão bigquery.tables.getData, que permite ao usuário consultar as visualizações no conjunto de dados public_dataset. Para informações sobre como conceder um papel a um usuário para um conjunto de dados, consulte Como controlar o acesso a conjuntos de dados.

    O usuário agora tem permissão para consultar visualizações no public_dataset, mas ainda não pode acessar a tabela private_table no private_dataset. Se o usuário tentar consultar a tabela private_table diretamente ou acessar a tabela private_table indiretamente por meio da consulta da visualização private_table_filtered, ele receberá uma mensagem de erro semelhantes a:

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

  2. Na página do BigQuery do console do Google Cloud, abra o conjunto de dados private_dataset, clique em Compartilhado e selecioneAutorizar conjuntos de dados.

  3. No painel Conjunto de dados autorizado exibido, insira PROJECT.public_dataset no campo ID do conjunto de dados e clique em Adicionar autorização.

    O conjunto de dados public_dataset é adicionado à lista de controle de acesso do conjunto de dados private_dataset, autorizando as visualizações no conjunto de dados public_dataset a consultar os dados no conjunto de dados private_dataset.

    O usuário agora pode consultar a visualização private_table_filtered no conjunto de dados public_dataset, que acessa indiretamente o conjunto de dados private_dataset, sem ter nenhuma permissão para acessar diretamente os dados no conjunto de dados private_dataset. de dados.

Limitações

  • É possível criar conjuntos de dados autorizados em diferentes regiões, mas o BigQuery não aceita consultas entre regiões. Por isso, recomendamos que você crie conjuntos de dados na mesma região.

A seguir

  • Para informações sobre como autorizar uma visualização individual para acessar dados em um conjunto de dados, consulte Visualizações autorizadas.

  • Para informações sobre como autorizar uma função de tabela ou uma função definida pelo usuário a acessar dados em um conjunto de dados, consulte Funções autorizadas.