Controle o acesso aos recursos com o IAM

Este documento descreve como ver, conceder e revogar controlos de acesso para conjuntos de dados do BigQuery e para os recursos nos conjuntos de dados: tabelas, vistas e rotinas. Embora os modelos também sejam recursos ao nível do conjunto de dados, não pode conceder acesso a modelos individuais através de funções de IAM.

Pode conceder acesso a Google Cloud recursos através de políticas de autorização, também conhecidas como políticas de gestão de identidade e de acesso (IAM), que são anexadas a recursos. Só pode anexar uma política de autorização a cada recurso. A política de autorização controla o acesso ao próprio recurso, bem como a todos os descendentes desse recurso que herdam a política de autorização.

Para mais informações sobre as políticas de autorização, consulte a secção Estrutura das políticas na documentação da IAM.

Este documento pressupõe familiaridade com a gestão de identidade e de acesso (IAM) no Google Cloud.

Limitações

  • As listas de controlo de acesso (ACLs) de rotina não estão incluídas nas rotinas replicadas.
  • As rotinas em conjuntos de dados externos ou associados não suportam controlos de acesso.
  • As tabelas em conjuntos de dados externos ou associados não suportam controlos de acesso.
  • Não é possível definir controlos de acesso de rotina com o Terraform.
  • Não é possível definir controlos de acesso de rotina com o SDK Cloud da Google.
  • Não é possível definir controlos de acesso de rotina através da linguagem de controlo de dados (DCL) do BigQuery.
  • O catálogo de dados não suporta controlos de acesso de rotina. Se um utilizador tiver concedido condicionalmente acesso ao nível da rotina, não vê as respetivas rotinas no painel lateral do BigQuery. Como solução alternativa, conceda acesso ao nível do conjunto de dados.
  • A vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES não mostra os controlos de acesso para rotinas.

Antes de começar

Conceda funções de gestão de identidade e acesso (IAM) que dão aos utilizadores as autorizações necessárias para realizar cada tarefa neste documento.

Funções necessárias

Para receber as autorizações de que precisa para modificar as políticas de IAM para recursos, peça ao seu administrador que lhe conceda a função de IAM de proprietário de dados do BigQuery (roles/bigquery.dataOwner) no projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para modificar as políticas de IAM para recursos. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para modificar as políticas de IAM para recursos:

  • Para obter a política de acesso de um conjunto de dados: bigquery.datasets.get
  • Para definir a política de acesso de um conjunto de dados: bigquery.datasets.update
  • Para obter a política de acesso de um conjunto de dados (Google Cloud apenas na consola): bigquery.datasets.getIamPolicy
  • Para definir a política de acesso de um conjunto de dados (apenas na consola): bigquery.datasets.setIamPolicy
  • Para obter a política de uma tabela ou de uma vista: bigquery.tables.getIamPolicy
  • Para definir uma política de tabela ou vista: bigquery.tables.setIamPolicy
  • Para obter a política de acesso de uma rotina: bigquery.routines.getIamPolicy
  • Para definir a política de acesso de uma rotina: bigquery.routines.setIamPolicy
  • Para criar a ferramenta bq ou tarefas SQL do BigQuery (opcional): bigquery.jobs.create

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Trabalhe com controlos de acesso a conjuntos de dados

Pode conceder acesso a um conjunto de dados atribuindo a um principal do IAM uma função predefinida ou personalizada que determina o que o principal pode fazer com o conjunto de dados. Isto também é conhecido como anexar uma política de autorização a um recurso. Depois de conceder acesso, pode ver os controlos de acesso do conjunto de dados e revogar o acesso ao conjunto de dados.

Conceda acesso a um conjunto de dados

Não pode conceder acesso a um conjunto de dados quando o cria através da IU Web do BigQuery ou da ferramenta de linha de comandos bq. Primeiro, tem de criar o conjunto de dados e, em seguida, conceder-lhe acesso. A API permite-lhe conceder acesso durante a criação do conjunto de dados chamando o método com um recurso de conjunto de dados definido.datasets.insert

Um projeto é o recurso principal de um conjunto de dados, e um conjunto de dados é o recurso principal de tabelas e vistas, rotinas e modelos. Quando atribui uma função ao nível do projeto, a função e as respetivas autorizações são herdadas pelo conjunto de dados e pelos recursos do conjunto de dados. Da mesma forma, quando atribui uma função ao nível do conjunto de dados, a função e as respetivas autorizações são herdadas pelos recursos no conjunto de dados.

Pode conceder acesso a um conjunto de dados concedendo uma autorização de função de IAM para aceder ao conjunto de dados ou concedendo acesso condicionalmente através de uma condição de IAM. Para mais informações sobre a concessão de acesso condicional, consulte o artigo Controle o acesso com as condições da IAM.

Para conceder a uma função da IAM acesso a um conjunto de dados sem usar condições, selecione uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto e selecione um conjunto de dados para partilhar.

  3. Clique em Partilha > Autorizações.

  4. Clique em Adicionar responsável.

  5. No campo Novos membros, introduza um membro.

  6. Na lista Selecionar uma função, selecione uma função predefinida ou uma função personalizada.

  7. Clique em Guardar.

  8. Para regressar às informações do conjunto de dados, clique em Fechar.

SQL

Para conceder aos principais acesso a conjuntos de dados, use a GRANT declaração DCL:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    GRANT `ROLE_LIST`
    ON SCHEMA RESOURCE_NAME
    TO "USER_LIST"

    Substitua o seguinte:

    • ROLE_LIST: uma função ou uma lista de funções separadas por vírgulas que quer conceder
    • RESOURCE_NAME: o nome do conjunto de dados ao qual está a conceder acesso
    • USER_LIST: uma lista de utilizadores separada por vírgulas aos quais a função é concedida

      Para ver uma lista de formatos válidos, consulte user_list.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

O exemplo seguinte concede a função de visualizador de dados do BigQuery a myDataset:

GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:[email protected]", "user:[email protected]"

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para escrever as informações do conjunto de dados existente (incluindo os controlos de acesso) num ficheiro JSON, use o comando bq show:

    bq show \
        --format=prettyjson \
        PROJECT_ID:DATASET > PATH_TO_FILE

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • DATASET: o nome do seu conjunto de dados
    • PATH_TO_FILE: o caminho para o ficheiro JSON no seu computador local
  3. Faça alterações à secção access do ficheiro JSON. Pode adicionar a qualquer uma das entradas specialGroup: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Também pode adicionar qualquer um dos seguintes elementos: userByEmail, groupByEmail e domain.

    Por exemplo, a secção access de um ficheiro JSON de um conjunto de dados teria o seguinte aspeto:

    {
     "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"
      }
     ],
     ...
    }
  4. Quando as edições estiverem concluídas, use o comando bq update e inclua o ficheiro JSON com a flag --source. Se o conjunto de dados estiver num projeto que não seja o seu projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato: PROJECT_ID:DATASET.

      bq update 
    --source PATH_TO_FILE
    PROJECT_ID:DATASET

  5. Para validar as alterações ao controlo de acesso, use novamente o comando bq show sem escrever as informações num ficheiro:

    bq show --format=prettyjson PROJECT_ID:DATASET
  6. Terraform

    Use os recursos google_bigquery_dataset_iam para atualizar o acesso a um conjunto de dados.

    Defina a política de acesso para um conjunto de dados

    O exemplo seguinte mostra como usar o recurso google_bigquery_dataset_iam_policy para definir a política de IAM para o conjunto de dados mydataset. Esta ação substitui qualquer política existente já anexada ao conjunto de dados:

    # This file sets the IAM policy for the dataset created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" dataset resource with a dataset_id of "mydataset".
    
    data "google_iam_policy" "iam_policy" {
      binding {
        role = "roles/bigquery.admin"
        members = [
          "user:[email protected]",
        ]
      }
      binding {
        role = "roles/bigquery.dataOwner"
        members = [
          "group:[email protected]",
        ]
      }
      binding {
        role = "roles/bigquery.dataEditor"
        members = [
          "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com",
        ]
      }
    }
    
    resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" {
      dataset_id  = google_bigquery_dataset.default.dataset_id
      policy_data = data.google_iam_policy.iam_policy.policy_data
    }

    Defina a associação de funções para um conjunto de dados

    O exemplo seguinte mostra como usar o recurso google_bigquery_dataset_iam_binding para definir a associação a uma determinada função para o conjunto de dados mydataset. Esta ação substitui qualquer registo de membro existente nessa função. Outras funções na política IAM para o conjunto de dados são preservadas:

    # This file sets membership in an IAM role for the dataset created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" dataset resource with a dataset_id of "mydataset".
    
    resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" {
      dataset_id = google_bigquery_dataset.default.dataset_id
      role       = "roles/bigquery.jobUser"
    
      members = [
        "user:[email protected]",
        "group:[email protected]"
      ]
    }

    Defina a associação de funções para um único principal

    O exemplo seguinte mostra como usar o recurso google_bigquery_dataset_iam_member para atualizar a política de IAM do conjunto de dados mydataset para conceder uma função a um principal. A atualização desta política de IAM não afeta o acesso de outros responsáveis que tenham recebido essa função para o conjunto de dados.

    # This file adds a member to an IAM role for the dataset created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" dataset resource with a dataset_id of "mydataset".
    
    resource "google_bigquery_dataset_iam_member" "dataset_iam_member" {
      dataset_id = google_bigquery_dataset.default.dataset_id
      role       = "roles/bigquery.user"
      member     = "user:[email protected]"
    }

    Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.

    Prepare o Cloud Shell

    1. Inicie o Cloud Shell.
    2. Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.

      Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.

    Prepare o diretório

    Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).

    1. No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o ficheiro é denominado main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.

      Copie o exemplo de código para o ficheiro main.tf criado recentemente.

      Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.

    3. Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
    4. Guarde as alterações.
    5. Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
      terraform init

      Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção -upgrade:

      terraform init -upgrade

    Aplique as alterações

    1. Reveja a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expetativas:
      terraform plan

      Faça as correções necessárias à configuração.

    2. Aplique a configuração do Terraform executando o seguinte comando e introduzindo yes no comando:
      terraform apply

      Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).

    3. Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.

    API

    Para aplicar controlos de acesso quando o conjunto de dados é criado, chame o método datasets.insert com um recurso de conjunto de dados definido. Para atualizar os controlos de acesso, chame o método datasets.patch e use a propriedade access no recurso Dataset.

    Uma vez que o método datasets.update substitui o recurso do conjunto de dados completo, o método datasets.patch é o preferencial para atualizar os controlos de acesso.

    Go

    Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Defina a nova lista de acesso anexando a nova entrada à lista existente com o tipo DatasetMetadataToUpdate . Em seguida, chame a função dataset.Update() para atualizar a propriedade.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // grantAccessToDataset creates a new ACL conceding the READER role to the group "[email protected]"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func grantAccessToDataset(w io.Writer, projectID, datasetID string) error {
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    
    	ctx := context.Background()
    
    	// Create BigQuery handler.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Create dataset handler
    	dataset := client.Dataset(datasetID)
    
    	// Get metadata
    	meta, err := dataset.Metadata(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Metadata: %w", err)
    	}
    
    	// Find more details about BigQuery Entity Types here:
    	// https://pkg.go.dev/cloud.google.com/go/bigquery#EntityType
    	//
    	// Find more details about BigQuery Access Roles here:
    	// https://pkg.go.dev/cloud.google.com/go/bigquery#AccessRole
    
    	entityType := bigquery.GroupEmailEntity
    	entityID := "[email protected]"
    	roleType := bigquery.ReaderRole
    
    	// Append a new access control entry to the existing access list.
    	update := bigquery.DatasetMetadataToUpdate{
    		Access: append(meta.Access, &bigquery.AccessEntry{
    			Role:       roleType,
    			EntityType: entityType,
    			Entity:     entityID,
    		}),
    	}
    
    	// Leverage the ETag for the update to assert there's been no modifications to the
    	// dataset since the metadata was originally read.
    	meta, err = dataset.Update(ctx, update, meta.ETag)
    	if err != nil {
    		return err
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in dataset %v.\n", datasetID)
    	for _, access := range meta.Access {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", access.Role)
    		fmt.Fprintf(w, "Entities: %v\n", access.Entity)
    	}
    
    	return nil
    }
    

    Java

    Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    import com.google.cloud.bigquery.Acl;
    import com.google.cloud.bigquery.Acl.Entity;
    import com.google.cloud.bigquery.Acl.Group;
    import com.google.cloud.bigquery.Acl.Role;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import java.util.ArrayList;
    import java.util.List;
    
    public class GrantAccessToDataset {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project and dataset from which to get the access policy
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        // Group to add to the ACL
        String entityEmail = "[email protected]";
    
        grantAccessToDataset(projectId, datasetName, entityEmail);
      }
    
      public static void grantAccessToDataset(
          String projectId, String datasetName, String entityEmail) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create datasetId with the projectId and the datasetName.
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);
    
          // Create a new Entity with the corresponding type and email
          // "[email protected]"
          // For more information on the types of Entities available see:
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity
          // and
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity.Type
          Entity entity = new Group(entityEmail);
    
          // Create a new ACL granting the READER role to the group with the entity email
          // "[email protected]"
          // For more information on the types of ACLs available see:
          // https://cloud.google.com/storage/docs/access-control/lists
          Acl newEntry = Acl.of(entity, Role.READER);
    
          // Get a copy of the ACLs list from the dataset and append the new entry.
          List<Acl> acls = new ArrayList<>(dataset.getAcl());
          acls.add(newEntry);
    
          // Update the ACLs by setting the new list.
          Dataset updatedDataset = bigquery.update(dataset.toBuilder().setAcl(acls).build());
          System.out.println(
              "ACLs of dataset \""
                  + updatedDataset.getDatasetId().getDataset()
                  + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("ACLs were not updated \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Defina a nova lista de acesso anexando a nova entrada à lista existente através do método Dataset#metadata. Em seguida, chame a função Dataset#setMetadata() para atualizar a propriedade.
    
    /**
     * TODO(developer): Update and un-comment below lines.
     */
    
    // const datasetId = "my_project_id.my_dataset_name";
    
    // ID of the user or group from whom you are adding access.
    // const entityId = "[email protected]";
    
    // One of the "Basic roles for datasets" described here:
    // https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
    // const role = "READER";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    // Type of entity you are granting access to.
    // Find allowed allowed entity type names here:
    // https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource:-dataset
    const entityType = 'groupByEmail';
    
    async function grantAccessToDataset() {
      const [dataset] = await client.dataset(datasetId).get();
    
      // The 'access entries' array is immutable. Create a copy for modifications.
      const entries = [...dataset.metadata.access];
    
      // Append an AccessEntry to grant the role to a dataset.
      // Find more details about the AccessEntry object in the BigQuery documentation:
      // https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
      entries.push({
        role,
        [entityType]: entityId,
      });
    
      // Assign the array of AccessEntries back to the dataset.
      const metadata = {
        access: entries,
      };
    
      // Update will only succeed if the dataset
      // has not been modified externally since retrieval.
      //
      // See the BigQuery client library documentation for more details on metadata updates:
      // https://cloud.google.com/nodejs/docs/reference/bigquery/latest
    
      // Update just the 'access entries' property of the dataset.
      await client.dataset(datasetId).setMetadata(metadata);
    
      console.log(
        `Role '${role}' granted for entity '${entityId}' in '${datasetId}'.`
      );
    }

    Python

    Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Defina a propriedade dataset.access_entries com os controlos de acesso para um conjunto de dados. Em seguida, chame a função client.update_dataset() para atualizar a propriedade.
    from google.api_core.exceptions import PreconditionFailed
    from google.cloud import bigquery
    from google.cloud.bigquery.enums import EntityTypes
    
    # TODO(developer): Update and uncomment the lines below.
    
    # ID of the dataset to grant access to.
    # dataset_id = "my_project_id.my_dataset"
    
    # ID of the user or group receiving access to the dataset.
    # Alternatively, the JSON REST API representation of the entity,
    # such as the view's table reference.
    # entity_id = "[email protected]"
    
    # One of the "Basic roles for datasets" described here:
    # https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
    # role = "READER"
    
    # Type of entity you are granting access to.
    # Find allowed allowed entity type names here:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/enums#class-googlecloudbigqueryenumsentitytypesvalue
    entity_type = EntityTypes.GROUP_BY_EMAIL
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # Get a reference to the dataset.
    dataset = client.get_dataset(dataset_id)
    
    # The `access_entries` list is immutable. Create a copy for modifications.
    entries = list(dataset.access_entries)
    
    # Append an AccessEntry to grant the role to a dataset.
    # Find more details about the AccessEntry object here:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
    entries.append(
        bigquery.AccessEntry(
            role=role,
            entity_type=entity_type,
            entity_id=entity_id,
        )
    )
    
    # Assign the list of AccessEntries back to the dataset.
    dataset.access_entries = entries
    
    # Update will only succeed if the dataset
    # has not been modified externally since retrieval.
    #
    # See the BigQuery client library documentation for more details on `update_dataset`:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.client.Client#google_cloud_bigquery_client_Client_update_dataset
    try:
        # Update just the `access_entries` property of the dataset.
        dataset = client.update_dataset(
            dataset,
            ["access_entries"],
        )
    
        # Show a success message.
        full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
        print(
            f"Role '{role}' granted for entity '{entity_id}'"
            f" in dataset '{full_dataset_id}'."
        )
    except PreconditionFailed:  # A read-modify-write error
        print(
            f"Dataset '{dataset.dataset_id}' was modified remotely before this update. "
            "Fetch the latest version and retry."
        )

Funções predefinidas que concedem acesso a conjuntos de dados

Pode conceder às seguintes funções predefinidas de IAM acesso a um conjunto de dados.

Função Descrição
Proprietário dos dados do BigQuery (roles/bigquery.dataOwner) Quando concedida num conjunto de dados, esta função concede as seguintes autorizações:
  • Todas as autorizações para o conjunto de dados e para todos os recursos no conjunto de dados: tabelas e vistas, modelos e rotinas.
Editor de dados do BigQuery (roles/bigquery.dataEditor) Quando concedida num conjunto de dados, esta função concede as seguintes autorizações:
  • Obtenha metadados e autorizações para o conjunto de dados.
  • Para tabelas e vistas:
    • Criar, atualizar, obter, apresentar em lista e eliminar as tabelas e as vistas do conjunto de dados.
    • Ler (consultar), exportar, replicar e atualizar dados de tabelas.
    • Criar, atualizar e eliminar índices.
    • Criar e restaurar instantâneos.
  • Todas as autorizações para as rotinas e os modelos do conjunto de dados.
Visualizador de dados do BigQuery (roles/bigquery.dataViewer) Quando concedida num conjunto de dados, esta função concede as seguintes autorizações:
  • Obtenha metadados e autorizações para o conjunto de dados.
  • Liste as tabelas, as vistas e os modelos de um conjunto de dados.
  • Obter metadados e controlos de acesso para as tabelas e as vistas do conjunto de dados.
  • Ler (consultar), replicar e exportar dados de tabelas, bem como criar instantâneos.
  • Listar e invocar as rotinas do conjunto de dados.
Visualizador de metadados do BigQuery (roles/bigquery.metadataViewer) Quando concedida num conjunto de dados, esta função concede as seguintes autorizações:
  • Obtenha metadados e controlos de acesso para o conjunto de dados.
  • Obtenha metadados e controlos de acesso para tabelas e vistas.
  • Obtenha metadados dos modelos e das rotinas do conjunto de dados.
  • Liste tabelas, vistas, modelos e rotinas no conjunto de dados.

Autorizações do conjunto de dados

A maioria das autorizações que começam com bigquery.datasets aplica-se ao nível do conjunto de dados. O bigquery.datasets.create não. Para criar conjuntos de dados, tem de conceder autorização bigquery.datasets.create a uma função no contentor principal, ou seja, o projeto.

A tabela seguinte apresenta todas as autorizações para conjuntos de dados e o recurso de nível mais baixo ao qual a autorização pode ser aplicada.

Autorização Recurso Ação
bigquery.datasets.create Projeto Criar novos conjuntos de dados no projeto.
bigquery.datasets.get Conjunto de dados Obtenha metadados e controlos de acesso para o conjunto de dados. As autorizações de visualização na consola também requerem a autorização bigquery.datasets.getIamPolicy.
bigquery.datasets.getIamPolicy Conjunto de dados Necessário pela consola para conceder ao utilizador autorização para obter os controlos de acesso de um conjunto de dados. Falha ao abrir. A consola também requer a autorização bigquery.datasets.get para ver o conjunto de dados.
bigquery.datasets.update Conjunto de dados Atualize os metadados e os controlos de acesso do conjunto de dados. A atualização dos controlos de acesso na consola também requer a autorização bigquery.datasets.setIamPolicy.
bigquery.datasets.setIamPolicy Conjunto de dados Obrigatório pela consola para conceder ao utilizador autorização para definir os controlos de acesso de um conjunto de dados. Falha ao abrir. A consola também requer a autorização bigquery.datasets.update para atualizar o conjunto de dados.
bigquery.datasets.delete Conjunto de dados Eliminar um conjunto de dados.
bigquery.datasets.createTagBinding Conjunto de dados Anexe etiquetas ao conjunto de dados.
bigquery.datasets.deleteTagBinding Conjunto de dados Desassocie etiquetas do conjunto de dados.
bigquery.datasets.listTagBindings Conjunto de dados Liste as etiquetas do conjunto de dados.
bigquery.datasets.listEffectiveTags Conjunto de dados Apresentar uma lista de etiquetas eficazes (aplicadas e herdadas) para o conjunto de dados.
bigquery.datasets.link Conjunto de dados Crie um conjunto de dados associado.
bigquery.datasets.listSharedDatasetUsage Projeto Apresenta estatísticas de utilização de conjuntos de dados partilhados aos quais tem acesso no projeto. Esta autorização é necessária para consultar a vista INFORMATION_SCHEMA.SHARED_DATASET_USAGE.

Veja os controlos de acesso de um conjunto de dados

Pode ver os controlos de acesso definidos explicitamente para um conjunto de dados escolhendo uma das seguintes opções. Para ver funções herdadas, para um conjunto de dados, use a IU Web do BigQuery.

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto e selecione um conjunto de dados.

  3. Clique em Partilhar > Autorizações.

    Os controlos de acesso do conjunto de dados aparecem no painel Autorizações do conjunto de dados.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para obter uma política existente e enviá-la para um ficheiro local em JSON, use o comando bq show no Cloud Shell:

    bq show \
       --format=prettyjson \
       PROJECT_ID:DATASET > PATH_TO_FILE

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • DATASET: o nome do seu conjunto de dados
    • PATH_TO_FILE: o caminho para o ficheiro JSON no seu computador local
  3. SQL

    Consulte a INFORMATION_SCHEMA.OBJECT_PRIVILEGES vista. As consultas para obter controlos de acesso para um conjunto de dados têm de especificar o object_name.

    1. Na Google Cloud consola, aceda à página BigQuery.

      Aceda ao BigQuery

    2. No editor de consultas, introduza a seguinte declaração:

      SELECT
      COLUMN_LIST
      FROM
        PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
      WHERE
      object_name = "DATASET";

      Substitua o seguinte:

    3. Clique em Executar.

    Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

    Exemplo:

    Esta consulta obtém controlos de acesso para mydataset.

    SELECT
    object_name, privilege_type, grantee
    FROM
    my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE
    object_name = "mydataset";

    O resultado deve ter o seguinte aspeto:

    +------------------+-----------------------------+-------------------------+
    |   object_name    |  privilege_type             | grantee                 |
    +------------------+-----------------------------+-------------------------+
    | mydataset        | roles/bigquery.dataOwner    | projectOwner:myproject  |
    | mydataset        | roles/bigquery.dataViwer    | user:[email protected]   |
    +------------------+-----------------------------+-------------------------+
    

    API

    Para ver os controlos de acesso de um conjunto de dados, chame o método datasets.get com um recurso dataset definido.

    Os controlos de acesso aparecem na propriedade access do recurso dataset.

    Go

    Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Chama a função client.Dataset().Metadata(). A política de acesso está disponível na propriedade Access.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // viewDatasetAccessPolicies retrieves the ACL for the given dataset
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func viewDatasetAccessPolicies(w io.Writer, projectID, datasetID string) error {
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    
    	ctx := context.Background()
    
    	// Create new client.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get dataset's metadata.
    	meta, err := client.Dataset(datasetID).Metadata(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Client.Dataset.Metadata: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in dataset %v.\n", datasetID)
    
    	// Iterate over access permissions.
    	for _, access := range meta.Access {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", access.Role)
    		fmt.Fprintf(w, "Entity: %v\n", access.Entity)
    	}
    
    	return nil
    }
    

    Java

    Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    
    import com.google.cloud.bigquery.Acl;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import java.util.List;
    
    public class GetDatasetAccessPolicy {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project and dataset from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        getDatasetAccessPolicy(projectId, datasetName);
      }
    
      public static void getDatasetAccessPolicy(String projectId, String datasetName) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create datasetId with the projectId and the datasetName.
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);
    
          // Show ACL details.
          // Find more information about ACL and the Acl Class here:
          // https://cloud.google.com/storage/docs/access-control/lists
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl
          List<Acl> acls = dataset.getAcl();
          System.out.println("ACLs in dataset \"" + dataset.getDatasetId().getDataset() + "\":");
          System.out.println(acls.toString());
          for (Acl acl : acls) {
            System.out.println();
            System.out.println("Role: " + acl.getRole());
            System.out.println("Entity: " + acl.getEntity());
          }
        } catch (BigQueryException e) {
          System.out.println("ACLs info not retrieved. \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Obtenha os metadados do conjunto de dados através da função Dataset#getMetadata(). A política de acesso está disponível na propriedade de acesso do objeto de metadados resultante.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const datasetId = "my_project_id.my_dataset";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const bigquery = new BigQuery();
    
    async function viewDatasetAccessPolicy() {
      const dataset = bigquery.dataset(datasetId);
    
      const [metadata] = await dataset.getMetadata();
      const accessEntries = metadata.access || [];
    
      // Show the list of AccessEntry objects.
      // More details about the AccessEntry object in the BigQuery documentation:
      // https://cloud.google.com/nodejs/docs/reference/bigquery/latest
      console.log(
        `${accessEntries.length} Access entries in dataset '${datasetId}':`
      );
      for (const accessEntry of accessEntries) {
        console.log(`Role: ${accessEntry.role || 'null'}`);
        console.log(`Special group: ${accessEntry.specialGroup || 'null'}`);
        console.log(`User by Email: ${accessEntry.userByEmail || 'null'}`);
      }
    }

    Python

    Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Chama a função client.get_dataset(). A política de acesso está disponível na propriedade dataset.access_entries.
    from google.cloud import bigquery
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # TODO(developer): Update and uncomment the lines below.
    
    # Dataset from which to get the access policy.
    # dataset_id = "my_dataset"
    
    # Get a reference to the dataset.
    dataset = client.get_dataset(dataset_id)
    
    # Show the list of AccessEntry objects.
    # More details about the AccessEntry object here:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
    print(
        f"{len(dataset.access_entries)} Access entries found "
        f"in dataset '{dataset_id}':"
    )
    
    for access_entry in dataset.access_entries:
        print()
        print(f"Role: {access_entry.role}")
        print(f"Special group: {access_entry.special_group}")
        print(f"User by Email: {access_entry.user_by_email}")

Revogue o acesso a um conjunto de dados

Para revogar o acesso a um conjunto de dados, selecione uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto e selecione um conjunto de dados.

  3. No painel de detalhes, clique em Partilha > Autorizações.

  4. Na caixa de diálogo Autorizações do conjunto de dados, expanda o principal cujo acesso quer revogar.

  5. Clique em Remover principal.

  6. Na caixa de diálogo Remover função do principal?, clique em Remover.

  7. Para regressar aos detalhes do conjunto de dados, clique em Fechar.

SQL

Para remover o acesso de um principal a um conjunto de dados, use a REVOKE declaração DCL:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    REVOKE `ROLE_LIST`
    ON SCHEMA RESOURCE_NAME
    FROM "USER_LIST"

    Substitua o seguinte:

    • ROLE_LIST: uma função ou uma lista de funções separadas por vírgulas que quer revogar
    • RESOURCE_NAME: o nome do recurso no qual quer revogar a autorização
    • USER_LIST: uma lista de utilizadores separados por vírgulas cujas funções vão ser revogadas

      Para ver uma lista de formatos válidos, consulte user_list.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

O exemplo seguinte revoga a função de proprietário de dados do BigQuery de myDataset:

REVOKE `roles/bigquery.dataOwner`
ON SCHEMA `myProject`.myDataset
FROM "group:[email protected]", "serviceAccount:[email protected]"

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para escrever as informações do conjunto de dados existente (incluindo os controlos de acesso) num ficheiro JSON, use o comando bq show:

    bq show \
        --format=prettyjson \
        PROJECT_ID:DATASET > PATH_TO_FILE

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • DATASET: o nome do seu conjunto de dados
    • PATH_TO_FILE: o caminho para o ficheiro JSON no seu computador local
  3. Faça alterações à secção access do ficheiro JSON. Pode remover qualquer uma das entradas specialGroup: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Também pode remover qualquer um dos seguintes elementos: userByEmail, groupByEmail e domain.

    Por exemplo, a secção access de um ficheiro JSON de um conjunto de dados teria o seguinte aspeto:

    {
     "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"
      }
     ],
     ...
    }
  4. Quando as edições estiverem concluídas, use o comando bq update e inclua o ficheiro JSON com a flag --source. Se o conjunto de dados estiver num projeto que não seja o seu projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato: PROJECT_ID:DATASET.

      bq update 
    --source PATH_TO_FILE
    PROJECT_ID:DATASET

  5. Para validar as alterações de controlo de acesso, use o comando show sem escrever as informações num ficheiro:

    bq show --format=prettyjson PROJECT_ID:DATASET
  6. API

    Chame o métododatasets.patch e use a propriedade access no recurso Dataset para atualizar os controlos de acesso.

    Uma vez que o método datasets.update substitui o recurso do conjunto de dados completo, o método datasets.patch é o preferencial para atualizar os controlos de acesso.

    Go

    Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Defina a nova lista de acesso removendo a entrada da lista existente com o tipo DatasetMetadataToUpdate . Em seguida, chame a função dataset.Update() para atualizar a propriedade.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // revokeAccessToDataset creates a new ACL removing the dataset access to "[email protected]" entity
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func revokeAccessToDataset(w io.Writer, projectID, datasetID, entity string) error {
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// entity := "[email protected]"
    
    	ctx := context.Background()
    
    	// Create BigQuery client.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get dataset handler
    	dataset := client.Dataset(datasetID)
    
    	// Get dataset metadata
    	meta, err := dataset.Metadata(ctx)
    	if err != nil {
    		return err
    	}
    
    	// Create new access entry list by copying the existing and omiting the access entry entity value
    	var newAccessList []*bigquery.AccessEntry
    	for _, entry := range meta.Access {
    		if entry.Entity != entity {
    			newAccessList = append(newAccessList, entry)
    		}
    	}
    
    	// Only proceed with update if something in the access list was removed.
    	// Additionally, we use the ETag from the initial metadata to ensure no
    	// other changes were made to the access list in the interim.
    	if len(newAccessList) < len(meta.Access) {
    		update := bigquery.DatasetMetadataToUpdate{
    			Access: newAccessList,
    		}
    		meta, err = dataset.Update(ctx, update, meta.ETag)
    		if err != nil {
    			return err
    		}
    	} else {
    		return fmt.Errorf("any access entry was revoked")
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in dataset %v.\n", datasetID)
    
    	for _, access := range meta.Access {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", access.Role)
    		fmt.Fprintf(w, "Entity: %v\n", access.Entity)
    	}
    
    	return nil
    }
    

    Java

    Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    
    import com.google.cloud.bigquery.Acl;
    import com.google.cloud.bigquery.Acl.Entity;
    import com.google.cloud.bigquery.Acl.Group;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import java.util.List;
    
    public class RevokeDatasetAccess {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project and dataset from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        // Group to remove from the ACL
        String entityEmail = "[email protected]";
    
        revokeDatasetAccess(projectId, datasetName, entityEmail);
      }
    
      public static void revokeDatasetAccess(String projectId, String datasetName, String entityEmail) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create datasetId with the projectId and the datasetName.
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);
    
          // Create a new Entity with the corresponding type and email
          // "[email protected]"
          // For more information on the types of Entities available see:
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity
          // and
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity.Type
          Entity entity = new Group(entityEmail);
    
          // To revoke access to a dataset, remove elements from the Acl list.
          // Find more information about ACL and the Acl Class here:
          // https://cloud.google.com/storage/docs/access-control/lists
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl
          // Remove the entity from the ACLs list.
          List<Acl> acls =
              dataset.getAcl().stream().filter(acl -> !acl.getEntity().equals(entity)).toList();
    
          // Update the ACLs by setting the new list.
          bigquery.update(dataset.toBuilder().setAcl(acls).build());
          System.out.println("ACLs of \"" + datasetName + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("ACLs were not updated \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Atualize a lista de acesso ao conjunto de dados removendo a entrada especificada da lista existente através do método Dataset#get() para obter os metadados atuais. Modifique a propriedade de acesso para excluir a entidade pretendida e, em seguida, chame a função Dataset#setMetadata() para aplicar a lista de acesso atualizada.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    
    // const datasetId = "my_project_id.my_dataset"
    
    // ID of the user or group from whom you are revoking access.
    // const entityId = "[email protected]"
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const bigquery = new BigQuery();
    
    async function revokeDatasetAccess() {
      const [dataset] = await bigquery.dataset(datasetId).get();
    
      // To revoke access to a dataset, remove elements from the access list.
      //
      // See the BigQuery client library documentation for more details on access entries:
      // https://cloud.google.com/nodejs/docs/reference/bigquery/latest
    
      // Filter access entries to exclude entries matching the specified entity_id
      // and assign a new list back to the access list.
      dataset.metadata.access = dataset.metadata.access.filter(entry => {
        return !(
          entry.entity_id === entityId ||
          entry.userByEmail === entityId ||
          entry.groupByEmail === entityId
        );
      });
    
      // Update will only succeed if the dataset
      // has not been modified externally since retrieval.
      //
      // See the BigQuery client library documentation for more details on metadata updates:
      // https://cloud.google.com/bigquery/docs/updating-datasets
    
      // Update just the 'access entries' property of the dataset.
      await dataset.setMetadata(dataset.metadata);
    
      console.log(`Revoked access to '${entityId}' from '${datasetId}'.`);
    }

    Python

    Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Defina a propriedade dataset.access_entries com os controlos de acesso para um conjunto de dados. Em seguida, chame a função client.update_dataset() para atualizar a propriedade.
    from google.cloud import bigquery
    from google.api_core.exceptions import PreconditionFailed
    
    # TODO(developer): Update and uncomment the lines below.
    
    # ID of the dataset to revoke access to.
    # dataset_id = "my-project.my_dataset"
    
    # ID of the user or group from whom you are revoking access.
    # Alternatively, the JSON REST API representation of the entity,
    # such as a view's table reference.
    # entity_id = "[email protected]"
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # Get a reference to the dataset.
    dataset = client.get_dataset(dataset_id)
    
    # To revoke access to a dataset, remove elements from the AccessEntry list.
    #
    # See the BigQuery client library documentation for more details on `access_entries`:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.Dataset#google_cloud_bigquery_dataset_Dataset_access_entries
    
    # Filter `access_entries` to exclude entries matching the specified entity_id
    # and assign a new list back to the AccessEntry list.
    dataset.access_entries = [
        entry for entry in dataset.access_entries
        if entry.entity_id != entity_id
    ]
    
    # Update will only succeed if the dataset
    # has not been modified externally since retrieval.
    #
    # See the BigQuery client library documentation for more details on `update_dataset`:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.client.Client#google_cloud_bigquery_client_Client_update_dataset
    try:
        # Update just the `access_entries` property of the dataset.
        dataset = client.update_dataset(
            dataset,
            ["access_entries"],
        )
    
        # Notify user that the API call was successful.
        full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
        print(f"Revoked dataset access for '{entity_id}' to ' dataset '{full_dataset_id}.'")
    except PreconditionFailed:  # A read-modify-write error.
        print(
            f"Dataset '{dataset.dataset_id}' was modified remotely before this update. "
            "Fetch the latest version and retry."
        )

Trabalhe com controlos de acesso de tabelas e vistas

As vistas são tratadas como recursos de tabelas no BigQuery. Pode conceder acesso a uma tabela ou a uma vista atribuindo a um principal do IAM uma função predefinida ou personalizada que determina o que o principal pode fazer com a tabela ou a vista. Isto também é conhecido como anexar uma política de autorização a um recurso. Depois de conceder acesso, pode ver os controlos de acesso da tabela ou da vista, e pode revogar o acesso à tabela ou à vista.

Conceda acesso a uma tabela ou a uma vista

Para um controlo de acesso detalhado, pode conceder uma função do IAM predefinida ou personalizada numa tabela ou vista específica. A tabela ou a vista também herda os controlos de acesso especificados ao nível do conjunto de dados e superior. Por exemplo, se conceder a um principal a função de proprietário de dados do BigQuery num conjunto de dados, esse principal também tem autorizações de proprietário de dados do BigQuery nas tabelas e nas vistas no conjunto de dados.

Para conceder acesso a uma tabela ou a uma vista, selecione uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto e selecione uma tabela ou uma vista para partilhar.

  3. Clique em Partilhar.

  4. Clique em Adicionar responsável.

  5. No campo Novos membros, introduza um membro.

  6. Na lista Selecionar uma função, selecione uma função predefinida ou uma função personalizada.

  7. Clique em Guardar.

  8. Para regressar à tabela ou ver detalhes, clique em Fechar.

SQL

Para conceder aos principais acesso a tabelas ou vistas, use a declaração DCL GRANT:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    GRANT `ROLE_LIST`
    ON RESOURCE_TYPE RESOURCE_NAME
    TO "USER_LIST"

    Substitua o seguinte:

    • ROLE_LIST: uma função ou uma lista de funções separadas por vírgulas que quer conceder
    • RESOURCE_TYPE: o tipo de recurso ao qual a função é aplicada

      Os valores suportados incluem TABLE, VIEW, MATERIALIZED VIEW e EXTERNAL TABLE.

    • RESOURCE_NAME: o nome do recurso no qual quer conceder a autorização
    • USER_LIST: uma lista de utilizadores separada por vírgulas aos quais a função é concedida

      Para ver uma lista de formatos válidos, consulte user_list.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

O exemplo seguinte concede a função de visualizador de dados do BigQuery em myTable:

GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:[email protected]", "user:[email protected]"

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para conceder acesso a uma tabela ou a uma vista, use o comando bq add-iam-policy-binding:

    bq add-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE
      --table=true RESOURCE

    Substitua o seguinte:

    • MEMBER_TYPE: o tipo de membro, como user, group, serviceAccount ou domain.
    • MEMBER: o endereço de email ou o nome do domínio do membro.
    • ROLE: a função que quer conceder ao membro.
    • RESOURCE: o nome da tabela ou da vista cuja política quer atualizar.
  3. Terraform

    Use os recursos google_bigquery_table_iam para atualizar o acesso a uma tabela.

    Defina a política de acesso para uma tabela

    O exemplo seguinte mostra como usar o recurso google_bigquery_table_iam_policy para definir a política de IAM para a tabela mytable. Isto substitui qualquer política existente já anexada à tabela:

    # This file sets the IAM policy for the table created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" table resource with a table_id of "mytable".
    
    data "google_iam_policy" "iam_policy" {
      binding {
        role = "roles/bigquery.dataOwner"
        members = [
          "user:[email protected]",
        ]
      }
    }
    
    resource "google_bigquery_table_iam_policy" "table_iam_policy" {
      dataset_id  = google_bigquery_table.default.dataset_id
      table_id    = google_bigquery_table.default.table_id
      policy_data = data.google_iam_policy.iam_policy.policy_data
    }

    Defina a associação de funções para uma tabela

    O exemplo seguinte mostra como usar o recurso google_bigquery_table_iam_binding para definir a associação numa determinada função para a tabela mytable. Esta ação substitui qualquer registo de membro existente nessa função. Outras funções na política de IAM para a tabela são preservadas.

    # This file sets membership in an IAM role for the table created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" table resource with a table_id of "mytable".
    
    resource "google_bigquery_table_iam_binding" "table_iam_binding" {
      dataset_id = google_bigquery_table.default.dataset_id
      table_id   = google_bigquery_table.default.table_id
      role       = "roles/bigquery.dataOwner"
    
      members = [
        "group:[email protected]",
      ]
    }

    Defina a associação de funções para um único principal

    O exemplo seguinte mostra como usar o recurso google_bigquery_table_iam_member para atualizar a política de IAM da tabela mytable de modo a conceder uma função a um principal. A atualização desta política de IAM não afeta o acesso de outros responsáveis que tenham recebido essa função para o conjunto de dados.

    # This file adds a member to an IAM role for the table created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" table resource with a table_id of "mytable".
    
    resource "google_bigquery_table_iam_member" "table_iam_member" {
      dataset_id = google_bigquery_table.default.dataset_id
      table_id   = google_bigquery_table.default.table_id
      role       = "roles/bigquery.dataEditor"
      member     = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com"
    }

    Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.

    Prepare o Cloud Shell

    1. Inicie o Cloud Shell.
    2. Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.

      Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.

    Prepare o diretório

    Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).

    1. No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o ficheiro é denominado main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.

      Copie o exemplo de código para o ficheiro main.tf criado recentemente.

      Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.

    3. Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
    4. Guarde as alterações.
    5. Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
      terraform init

      Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção -upgrade:

      terraform init -upgrade

    Aplique as alterações

    1. Reveja a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expetativas:
      terraform plan

      Faça as correções necessárias à configuração.

    2. Aplique a configuração do Terraform executando o seguinte comando e introduzindo yes no comando:
      terraform apply

      Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).

    3. Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.

    API

    1. Para obter a política atual, chame o método tables.getIamPolicy.

    2. Edite a política para adicionar membros ou controlos de acesso, ou ambos. Para ver o formato exigido pela política, consulte o tópico de referência da Política.

    3. Chame tables.setIamPolicy para escrever a política atualizada.

    Go

    Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Chame a função IAM().SetPolicy() do recurso para guardar as alterações à política de acesso de uma tabela ou uma vista.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    	"cloud.google.com/go/iam"
    )
    
    // grantAccessToResource creates a new ACL conceding the VIEWER role to the group "[email protected]"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func grantAccessToResource(w io.Writer, projectID, datasetID, resourceID string) error {
    	// Resource can be a table or a view
    	//
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// resourceID := "myresource"
    
    	ctx := context.Background()
    
    	// Create new client
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get resource policy.
    	policy, err := client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Find more details about IAM Roles here:
    	// https://pkg.go.dev/cloud.google.com/go/iam#RoleName
    	entityID := "[email protected]"
    	roleType := iam.Viewer
    
    	// Add new policy.
    	policy.Add(fmt.Sprintf("group:%s", entityID), roleType)
    
    	// Update resource's policy.
    	err = client.Dataset(datasetID).Table(resourceID).IAM().SetPolicy(ctx, policy)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Get resource policy again expecting the update.
    	policy, err = client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in table or view %v.\n", resourceID)
    
    	for _, role := range policy.Roles() {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", role)
    		fmt.Fprintf(w, "Entities: %v\n", policy.Members(role))
    	}
    
    	return nil
    }
    

    Java

    Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    import com.google.cloud.Identity;
    import com.google.cloud.Policy;
    import com.google.cloud.Role;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    
    public class GrantAccessToTableOrView {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project, dataset and resource (table or view) from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        String resourceName = "MY_TABLE_NAME";
        // Role to add to the policy access
        Role role = Role.of("roles/bigquery.dataViewer");
        // Identity to add to the policy access
        Identity identity = Identity.user("[email protected]");
        grantAccessToTableOrView(projectId, datasetName, resourceName, role, identity);
      }
    
      public static void grantAccessToTableOrView(
          String projectId, String datasetName, String resourceName, Role role, Identity identity) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create table identity given the projectId, the datasetName and the resourceName.
          TableId tableId = TableId.of(projectId, datasetName, resourceName);
    
          // Add new user identity to current IAM policy.
          Policy policy = bigquery.getIamPolicy(tableId);
          policy = policy.toBuilder().addIdentity(role, identity).build();
    
          // Update the IAM policy by setting the new one.
          bigquery.setIamPolicy(tableId, policy);
    
          System.out.println("IAM policy of resource \"" + resourceName + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("IAM policy was not updated. \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Chame a função Table#getIamPolicy() para obter a política de IAM atual de uma tabela ou uma vista, modifique a política adicionando novas associações e, em seguida, use a função Table#setIamPolicy() para guardar as alterações à política de acesso.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const projectId = "YOUR_PROJECT_ID";
    // const datasetId = "YOUR_DATASET_ID";
    // const tableId = "YOUR_TABLE_ID";
    // const principalId = "YOUR_PRINCIPAL_ID";
    // const role = "YOUR_ROLE";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    async function grantAccessToTableOrView() {
      const dataset = client.dataset(datasetId);
      const table = dataset.table(tableId);
    
      // Get the IAM access policy for the table or view.
      const [policy] = await table.getIamPolicy();
    
      // Initialize bindings array.
      if (!policy.bindings) {
        policy.bindings = [];
      }
    
      // To grant access to a table or view
      // add bindings to the Table or View policy.
      //
      // Find more details about Policy and Binding objects here:
      // https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Policy
      // https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Binding
      const binding = {
        role,
        members: [principalId],
      };
      policy.bindings.push(binding);
    
      // Set the IAM access policy with updated bindings.
      await table.setIamPolicy(policy);
    
      // Show a success message.
      console.log(
        `Role '${role}' granted for principal '${principalId}' on resource '${datasetId}.${tableId}'.`
      );
    }
    
    await grantAccessToTableOrView();

    Python

    Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Chame a função client.set_iam_policy() para guardar as alterações à política de acesso de uma tabela ou uma vista.
    from google.cloud import bigquery
    
    # TODO(developer): Update and uncomment the lines below.
    
    # Google Cloud Platform project.
    # project_id = "my_project_id"
    
    # Dataset where the table or view is.
    # dataset_id = "my_dataset"
    
    # Table or view name to get the access policy.
    # resource_name = "my_table"
    
    # Principal to grant access to a table or view.
    # For more information about principal identifiers see:
    # https://cloud.google.com/iam/docs/principal-identifiers
    # principal_id = "user:[email protected]"
    
    # Role to grant to the principal.
    # For more information about BigQuery roles see:
    # https://cloud.google.com/bigquery/docs/access-control
    # role = "roles/bigquery.dataViewer"
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # Get the full table or view name.
    full_resource_name = f"{project_id}.{dataset_id}.{resource_name}"
    
    # Get the IAM access policy for the table or view.
    policy = client.get_iam_policy(full_resource_name)
    
    # To grant access to a table or view, add bindings to the IAM policy.
    #
    # Find more details about Policy and Binding objects here:
    # https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Policy
    # https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Binding
    binding = {
        "role": role,
        "members": [principal_id, ],
    }
    policy.bindings.append(binding)
    
    # Set the IAM access policy with updated bindings.
    updated_policy = client.set_iam_policy(full_resource_name, policy)
    
    # Show a success message.
    print(
        f"Role '{role}' granted for principal '{principal_id}'"
        f" on resource '{full_resource_name}'."
    )

Funções predefinidas que concedem acesso a tabelas e vistas

As vistas são tratadas como recursos de tabelas no BigQuery. Para um controlo de acesso detalhado, pode conceder uma função do IAM predefinida ou personalizada numa tabela ou vista específica. A tabela ou a vista também herda os controlos de acesso especificados ao nível do conjunto de dados e superior. Por exemplo, se conceder a um principal a função de proprietário de dados do BigQuery num conjunto de dados, esse principal também tem autorizações de proprietário de dados nas tabelas e nas vistas no conjunto de dados.

As seguintes funções de IAM predefinidas têm autorizações em tabelas ou vistas.

Função Descrição
Proprietário dos dados do BigQuery (roles/bigquery.dataOwner) Quando concedida numa tabela ou numa vista, esta função concede as seguintes autorizações:
  • Todas as autorizações para a tabela ou a vista.
  • Todas as autorizações para políticas de acesso ao nível da linha, exceto a autorização para substituir as restrições de viagem no tempo.
  • Defina categorias e políticas de dados ao nível da coluna.
Editor de dados do BigQuery (roles/bigquery.dataEditor) Quando concedida numa tabela ou numa vista, esta função concede as seguintes autorizações:
  • Obter metadados, atualizar metadados, obter controlos de acesso e eliminar a tabela ou a vista.
  • Obter (consultar), exportar, replicar e atualizar dados de tabelas.
  • Criar, atualizar e eliminar índices.
  • Criar e restaurar instantâneos.
Visualizador de dados do BigQuery (roles/bigquery.dataViewer) Quando concedida numa tabela ou numa vista, esta função concede as seguintes autorizações:
  • Obtenha metadados e controlos de acesso para a tabela ou a vista.
  • Obter (consultar), exportar e replicar dados de tabelas.
  • Criar instantâneos.
Visualizador de metadados do BigQuery (roles/bigquery.metadataViewer) Quando concedida numa tabela ou numa vista, esta função concede as seguintes autorizações:
  • Obtenha metadados e controlos de acesso para a tabela ou a vista.

Autorizações para tabelas e visualizações

As vistas são tratadas como recursos de tabelas no BigQuery. Todas as autorizações ao nível da tabela aplicam-se às vistas.

A maioria das autorizações que começam com bigquery.tables aplica-se ao nível da tabela. bigquery.tables.create e bigquery.tables.list não. Para criar e listar tabelas ou vistas, têm de ser concedidas autorizações bigquery.tables.create e bigquery.tables.list a uma função num contentor principal: o conjunto de dados ou o projeto.

A tabela seguinte apresenta todas as autorizações para tabelas e vistas, bem como o recurso de nível mais baixo ao qual podem ser concedidas.

Autorização Recurso Ação
bigquery.tables.create Conjunto de dados Criar novas tabelas no conjunto de dados.
bigquery.tables.createIndex Tabela Crie um índice de pesquisa na tabela.
bigquery.tables.deleteIndex Tabela Elimine um índice de pesquisa na tabela.
bigquery.tables.createSnapshot Tabela Crie um instantâneo da tabela. A criação de uma imagem instantânea requer várias autorizações adicionais ao nível da tabela e do conjunto de dados. Para ver detalhes, consulte a secção Autorizações e funções para criar instantâneos de tabelas.
bigquery.tables.deleteSnapshot Tabela Eliminar um instantâneo da tabela.
bigquery.tables.delete Tabela Elimine uma tabela.
bigquery.tables.createTagBinding Tabela Crie associações de etiquetas de recursos numa tabela.
bigquery.tables.deleteTagBinding Tabela Eliminar associações de etiquetas de recursos numa tabela.
bigquery.tables.listTagBindings Tabela Liste as associações de etiquetas de recursos numa tabela.
bigquery.tables.listEffectiveTags Tabela Listar as etiquetas eficazes (aplicadas e herdadas) para a tabela.
bigquery.tables.export Tabela Exporte os dados da tabela. A execução de uma tarefa de exportação também requer autorizações de bigquery.jobs.create.
bigquery.tables.get Tabela Obtenha metadados para uma tabela.
bigquery.tables.getData Tabela Consultar os dados da tabela. A execução de uma tarefa de consulta também requer autorizações bigquery.jobs.create.
bigquery.tables.getIamPolicy Tabela Aceda aos controlos de acesso da tabela.
bigquery.tables.list Conjunto de dados Listar todas as tabelas e metadados de tabelas no conjunto de dados.
bigquery.tables.replicateData Tabela Replique os dados da tabela. Esta autorização é necessária para criar visualizações materializadas de réplica.
bigquery.tables.restoreSnapshot Tabela Restaure um instantâneo de tabela.
bigquery.tables.setCategory Tabela Defina etiquetas de políticas no esquema da tabela.
bigquery.tables.setColumnDataPolicy Tabela Defina políticas de acesso ao nível da coluna numa tabela.
bigquery.tables.setIamPolicy Tabela Defina controlos de acesso numa tabela.
bigquery.tables.update Tabela Atualize a tabela. metadata. bigquery.tables.get também é necessário para atualizar os metadados das tabelas na consola.
bigquery.tables.updateData Tabela Atualize os dados da tabela.
bigquery.tables.updateIndex Tabela Atualize um índice de pesquisa na tabela.

Veja os controlos de acesso de uma tabela ou uma vista

Para ver os controlos de acesso de uma tabela ou uma vista, escolha uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto, expanda um conjunto de dados e selecione uma tabela ou uma vista.

  3. Clique em Partilhar.

    Os controlos de acesso à tabela ou à vista aparecem no painel Partilhar.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para obter uma política de acesso existente e enviá-la para um ficheiro local em JSON, use o comando bq get-iam-policy no Cloud Shell:

    bq get-iam-policy \
        --table=true \
        PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • DATASET: o nome do seu conjunto de dados
    • RESOURCE: o nome da tabela ou da vista cuja política quer ver
    • PATH_TO_FILE: o caminho para o ficheiro JSON no seu computador local
  3. SQL

    Consulte a INFORMATION_SCHEMA.OBJECT_PRIVILEGES vista. As consultas para obter controlos de acesso para uma tabela ou uma vista têm de especificar o object_schema e o object_name.

    1. Na Google Cloud consola, aceda à página BigQuery.

      Aceda ao BigQuery

    2. No editor de consultas, introduza a seguinte declaração:

      SELECT
      COLUMN_LIST
      FROM
        PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
      WHERE
      object_schema = "DATASET" AND object_name = "TABLE";

      Substitua o seguinte:

    3. Clique em Executar.

    Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

    Exemplo:

    SELECT
    object_name, privilege_type, grantee
    FROM
    my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE
    object_schema = "mydataset" AND object_name = "mytable";
    +------------------+-----------------------------+--------------------------+
    |   object_name    |  privilege_type             | grantee                  |
    +------------------+-----------------------------+--------------------------+
    | mytable          | roles/bigquery.dataEditor   | group:[email protected]|
    | mytable          | roles/bigquery.dataOwner    | user:[email protected]|
    +------------------+-----------------------------+--------------------------+
    

    API

    Para obter a política atual, chame o método tables.getIamPolicy.

    Go

    Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Chame a função IAM().Policy() do recurso. Em seguida, chame a função Roles() para obter a política de acesso de uma tabela ou uma vista.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // viewTableOrViewAccessPolicies retrieves the ACL for the given resource
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func viewTableOrViewAccessPolicies(w io.Writer, projectID, datasetID, resourceID string) error {
    	// Resource can be a table or a view
    	//
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "my-dataset-id"
    	// resourceID := "my-resource-id"
    
    	ctx := context.Background()
    
    	// Create new client.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get resource's policy access.
    	policy, err := client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in table or view %v.\n", resourceID)
    
    	for _, role := range policy.Roles() {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", role)
    		fmt.Fprintf(w, "Entities: %v\n", policy.Members(role))
    	}
    
    	return nil
    }
    

    Java

    Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    
    import com.google.cloud.Policy;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    
    public class GetTableOrViewAccessPolicy {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project, dataset and resource (table or view) from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        String resourceName = "MY_RESOURCE_NAME";
        getTableOrViewAccessPolicy(projectId, datasetName, resourceName);
      }
    
      public static void getTableOrViewAccessPolicy(
          String projectId, String datasetName, String resourceName) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create table identity given the projectId, the datasetName and the resourceName.
          TableId tableId = TableId.of(projectId, datasetName, resourceName);
    
          // Get the table IAM policy.
          Policy policy = bigquery.getIamPolicy(tableId);
    
          // Show policy details.
          // Find more information about the Policy Class here:
          // https://cloud.google.com/java/docs/reference/google-cloud-core/latest/com.google.cloud.Policy
          System.out.println(
              "IAM policy info of resource \"" + resourceName + "\" retrieved succesfully");
          System.out.println();
          System.out.println("IAM policy info: " + policy.toString());
        } catch (BigQueryException e) {
          System.out.println("IAM policy info not retrieved. \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Obtenha a política de IAM para uma tabela ou uma vista através da função Table#getIamPolicy(). Os detalhes da política de acesso estão disponíveis no objeto de política devolvido.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const projectId = "YOUR_PROJECT_ID"
    // const datasetId = "YOUR_DATASET_ID"
    // const resourceName = "YOUR_RESOURCE_NAME";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    async function viewTableOrViewAccessPolicy() {
      const dataset = client.dataset(datasetId);
      const table = dataset.table(resourceName);
    
      // Get the IAM access policy for the table or view.
      const [policy] = await table.getIamPolicy();
    
      // Initialize bindings if they don't exist
      if (!policy.bindings) {
        policy.bindings = [];
      }
    
      // Show policy details.
      // Find more details for the Policy object here:
      // https://cloud.google.com/bigquery/docs/reference/rest/v2/Policy
      console.log(`Access Policy details for table or view '${resourceName}'.`);
      console.log(`Bindings: ${JSON.stringify(policy.bindings, null, 2)}`);
      console.log(`etag: ${policy.etag}`);
      console.log(`Version: ${policy.version}`);
    }

Revogue o acesso a uma tabela ou a uma vista

Para revogar o acesso a uma tabela ou a uma vista, selecione uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto, expanda um conjunto de dados e selecione uma tabela ou uma vista.

  3. No painel de detalhes, clique em Partilhar.

  4. Na caixa de diálogo Partilhar, expanda o principal cujo acesso quer revogar.

  5. Clique em Eliminar.

  6. Na caixa de diálogo Remover função do principal?, clique em Remover.

  7. Para regressar à tabela ou ver detalhes, clique em Fechar.

SQL

Para remover o acesso a tabelas ou vistas de entidades, use a declaração DCL REVOKE:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    REVOKE `ROLE_LIST`
    ON RESOURCE_TYPE RESOURCE_NAME
    FROM "USER_LIST"

    Substitua o seguinte:

    • ROLE_LIST: uma função ou uma lista de funções separadas por vírgulas que quer revogar
    • RESOURCE_TYPE: o tipo de recurso do qual a função é revogada

      Os valores suportados incluem TABLE, VIEW, MATERIALIZED VIEW e EXTERNAL TABLE.

    • RESOURCE_NAME: o nome do recurso no qual quer revogar a autorização
    • USER_LIST: uma lista de utilizadores separada por vírgulas cujas funções vão ser revogadas

      Para ver uma lista de formatos válidos, consulte user_list.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

O exemplo seguinte revoga a função de proprietário de dados do BigQuery em myTable:

REVOKE `roles/bigquery.dataOwner`
ON TABLE `myProject`.myDataset.myTable
FROM "group:[email protected]", "serviceAccount:[email protected]"

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para revogar o acesso a uma tabela ou a uma vista, use o comando bq remove-iam-policy-binding:

    bq remove-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE
    --table=true RESOURCE

    Substitua o seguinte:

    • MEMBER_TYPE: o tipo de membro, como user, group, serviceAccount ou domain
    • MEMBER: o endereço de email ou o nome do domínio do membro
    • ROLE: a função que quer revogar ao membro
    • RESOURCE: o nome da tabela ou da vista cuja política quer atualizar
  3. API

    1. Para obter a política atual, chame o método tables.getIamPolicy.

    2. Edite a política para remover membros ou associações, ou ambos. Para ver o formato exigido pela política, consulte o tópico de referência da Política.

    3. Chame tables.setIamPolicy para escrever a política atualizada.

    Go

    Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Chame a função policy.Remove() para remover o acesso. Em seguida, chame a função IAM().SetPolicy() para guardar as alterações à política de acesso de uma tabela ou uma vista.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    	"cloud.google.com/go/iam"
    )
    
    // revokeTableOrViewAccessPolicies creates a new ACL removing the VIEWER role to group "[email protected]"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func revokeTableOrViewAccessPolicies(w io.Writer, projectID, datasetID, resourceID string) error {
    	// Resource can be a table or a view
    	//
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// resourceID := "myresource"
    
    	ctx := context.Background()
    
    	// Create new client
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get resource policy.
    	policy, err := client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Find more details about IAM Roles here:
    	// https://pkg.go.dev/cloud.google.com/go/iam#RoleName
    	entityID := "[email protected]"
    	roleType := iam.Viewer
    
    	// Revoke policy access.
    	policy.Remove(fmt.Sprintf("group:%s", entityID), roleType)
    
    	// Update resource's policy.
    	err = client.Dataset(datasetID).Table(resourceID).IAM().SetPolicy(ctx, policy)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Get resource policy again expecting the update.
    	policy, err = client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in table or view %v.\n", resourceID)
    
    	for _, role := range policy.Roles() {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", role)
    		fmt.Fprintf(w, "Entities: %v\n", policy.Members(role))
    	}
    
    	return nil
    }
    

    Java

    Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    import com.google.cloud.Identity;
    import com.google.cloud.Policy;
    import com.google.cloud.Role;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    
    public class RevokeAccessToTableOrView {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project, dataset and resource (table or view) from which to get the access policy
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        String resourceName = "MY_RESOURCE_NAME";
        // Role to remove from the access policy
        Role role = Role.of("roles/bigquery.dataViewer");
        // Identity to remove from the access policy
        Identity user = Identity.user("[email protected]");
        revokeAccessToTableOrView(projectId, datasetName, resourceName, role, user);
      }
    
      public static void revokeAccessToTableOrView(
          String projectId, String datasetName, String resourceName, Role role, Identity identity) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create table identity given the projectId, the datasetName and the resourceName.
          TableId tableId = TableId.of(projectId, datasetName, resourceName);
    
          // Remove either identities or roles, or both from bindings and replace it in
          // the current IAM policy.
          Policy policy = bigquery.getIamPolicy(tableId);
          // Create a copy of an immutable map.
          Map<Role, Set<Identity>> bindings = new HashMap<>(policy.getBindings());
    
          // Remove all identities with a specific role.
          bindings.remove(role);
          // Update bindings.
          policy = policy.toBuilder().setBindings(bindings).build();
    
          // Remove one identity in all the existing roles.
          for (Role roleKey : bindings.keySet()) {
            if (bindings.get(roleKey).contains(identity)) {
              // Create a copy of an immutable set if the identity is present in the role.
              Set<Identity> identities = new HashSet<>(bindings.get(roleKey));
              // Remove identity.
              identities.remove(identity);
              bindings.put(roleKey, identities);
              if (bindings.get(roleKey).isEmpty()) {
                // Remove the role if it has no identities.
                bindings.remove(roleKey);
              }
            }
          }
          // Update bindings.
          policy = policy.toBuilder().setBindings(bindings).build();
    
          // Update the IAM policy by setting the new one.
          bigquery.setIamPolicy(tableId, policy);
    
          System.out.println("IAM policy of resource \"" + resourceName + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("IAM policy was not updated. \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

    Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Obtenha a política de IAM atual para uma tabela ou uma vista através do método Table#getIamPolicy(). Modifique a política para remover a função ou o principal pretendido e, em seguida, aplique a política atualizada através do método Table#setIamPolicy().
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const projectId = "YOUR_PROJECT_ID"
    // const datasetId = "YOUR_DATASET_ID"
    // const tableId = "YOUR_TABLE_ID"
    // const roleToRemove = "YOUR_ROLE"
    // const principalToRemove = "YOUR_PRINCIPAL_ID"
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    async function revokeAccessToTableOrView() {
      const dataset = client.dataset(datasetId);
      const table = dataset.table(tableId);
    
      // Get the IAM access policy for the table or view.
      const [policy] = await table.getIamPolicy();
    
      // Initialize bindings array.
      if (!policy.bindings) {
        policy.bindings = [];
      }
    
      // To revoke access to a table or view,
      // remove bindings from the Table or View policy.
      //
      // Find more details about Policy objects here:
      // https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Policy
    
      if (principalToRemove) {
        // Create a copy of bindings for modifications.
        const bindings = [...policy.bindings];
    
        // Filter out the principal from each binding.
        for (const binding of bindings) {
          if (binding.members) {
            binding.members = binding.members.filter(
              m => m !== principalToRemove
            );
          }
        }
    
        // Filter out bindings with empty members.
        policy.bindings = bindings.filter(
          binding => binding.members && binding.members.length > 0
        );
      }
    
      if (roleToRemove) {
        // Filter out all bindings with the roleToRemove
        // and assign a new list back to the policy bindings.
        policy.bindings = policy.bindings.filter(b => b.role !== roleToRemove);
      }
    
      // Set the IAM access policy with updated bindings.
      await table.setIamPolicy(policy);
    
      // Both role and principal are removed
      if (roleToRemove !== null && principalToRemove !== null) {
        console.log(
          `Role '${roleToRemove}' revoked for principal '${principalToRemove}' on resource '${datasetId}.${tableId}'.`
        );
      }
    
      // Only role is removed
      if (roleToRemove !== null && principalToRemove === null) {
        console.log(
          `Role '${roleToRemove}' revoked for all principals on resource '${datasetId}.${tableId}'.`
        );
      }
    
      // Only principal is removed
      if (roleToRemove === null && principalToRemove !== null) {
        console.log(
          `Access revoked for principal '${principalToRemove}' on resource '${datasetId}.${tableId}'.`
        );
      }
    
      // No changes were made
      if (roleToRemove === null && principalToRemove === null) {
        console.log(
          `No changes made to access policy for '${datasetId}.${tableId}'.`
        );
      }
    }

Trabalhe com controlos de acesso para rotinas

Para enviar feedback ou pedir apoio técnico para esta funcionalidade, envie um email para [email protected].

Pode conceder acesso a uma rotina atribuindo a um principal do IAM uma função predefinida ou personalizada que determina o que o principal pode fazer com a rotina. Isto também é conhecido como anexar uma política de autorização a um recurso. Depois de conceder acesso, pode ver os controlos de acesso da rotina e revogar o acesso à rotina.

Conceda acesso a uma rotina

Para um controlo de acesso detalhado, pode conceder uma função de IAM predefinida ou personalizada numa rotina específica. A rotina também herda os controlos de acesso especificados ao nível do conjunto de dados e superior. Por exemplo, se conceder a um principal a função de proprietário de dados do BigQuery num conjunto de dados, esse principal também tem autorizações de proprietário de dados nas rotinas do conjunto de dados.

Selecione uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o seu projeto, expanda o conjunto de dados, expanda Rotinas e, em seguida, selecione uma rotina.

  3. Clique em Partilhar.

  4. Clique em Adicionar membros.

  5. No campo Novos membros, introduza um principal.

  6. Na lista Selecionar uma função, selecione uma função predefinida ou uma função personalizada.

  7. Clique em Guardar.

  8. Para voltar às informações da rotina, clique em Concluído.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para escrever as informações de rotina existentes (incluindo os controlos de acesso) num ficheiro JSON, use o comando bq get-iam-policy:

    bq get-iam-policy \
        PROJECT_ID:DATASET.ROUTINE \
        > PATH_TO_FILE

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • DATASET: o nome do conjunto de dados que contém a rotina que quer atualizar
    • ROUTINE: o nome do recurso a atualizar
    • PATH_TO_FILE: o caminho para o ficheiro JSON no seu computador local
  3. Faça alterações à secção bindings do ficheiro JSON. Uma associação associa um ou mais responsáveis a um único role. Os principais podem ser contas de utilizador, contas de serviço, grupos Google e domínios. Por exemplo, a secção bindings de um ficheiro JSON de uma rotina teria o seguinte aspeto:

    {
      "bindings": [
        {
          "role": "roles/bigquery.dataViewer",
          "members": [
            "user:[email protected]",
            "group:[email protected]",
            "domain:example.com",
          ]
        },
      ],
      "etag": "BwWWja0YfJA=",
      "version": 1
    }
  4. Para atualizar a política de acesso, use o comando bq set-iam-policy:

    bq set-iam-policy PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
  5. Para validar as alterações ao controlo de acesso, use o comando bq get-iam-policy novamente sem escrever as informações num ficheiro:

    bq get-iam-policy --format=prettyjson \\
        PROJECT_ID:DATASET.ROUTINE
  6. API

    1. Para obter a política atual, chame o método routines.getIamPolicy.

    2. Edite a política para adicionar responsáveis, associações ou ambos. Para ver o formato exigido pela política, consulte o tópico de referência da Política.

    3. Call routines.setIamPolicy para escrever a política atualizada.

Funções predefinidas que concedem acesso a rotinas

Para um controlo de acesso detalhado, pode conceder uma função de IAM predefinida ou personalizada numa rotina específica. A rotina também herda os controlos de acesso especificados ao nível do conjunto de dados e superior. Por exemplo, se conceder a um principal a função de proprietário de dados num conjunto de dados, esse principal também tem autorizações de proprietário de dados nas rotinas no conjunto de dados através da herança.

As seguintes funções de IAM predefinidas têm autorizações em rotinas.

Função Descrição
Proprietário dos dados do BigQuery (roles/bigquery.dataOwner) Quando concedida numa rotina, esta função concede as seguintes autorizações:
  • Todas as autorizações para a rotina.

Não deve conceder a função de proprietário dos dados ao nível da rotina. O Editor de dados também concede todas as autorizações para a rotina e é uma função menos permissiva.

Editor de dados do BigQuery (roles/bigquery.dataEditor) Quando concedida numa rotina, esta função concede as seguintes autorizações:
  • Todas as autorizações para a rotina.
Visualizador de dados do BigQuery (roles/bigquery.dataViewer) Quando concedida numa rotina, esta função concede as seguintes autorizações:
  • Numa consulta, referenciar uma rotina criada por outra pessoa.
Visualizador de metadados do BigQuery (roles/bigquery.metadataViewer) Quando concedida numa rotina, esta função concede as seguintes autorizações:
  • Numa consulta, referenciar uma rotina criada por outra pessoa.

Autorizações para rotinas

A maioria das autorizações que começam com bigquery.routines aplica-se ao nível da rotina. bigquery.routines.create e bigquery.routines.list não. Para criar e listar rotinas, as autorizações bigquery.routines.create e bigquery.routines.list têm de ser concedidas a uma função no contentor principal, ou seja, o conjunto de dados.

A tabela seguinte apresenta todas as autorizações para rotinas e o recurso de nível mais baixo ao qual podem ser concedidas.

Autorização Recurso Descrição
bigquery.routines.create Conjunto de dados Crie uma rotina no conjunto de dados. Esta autorização também requer bigquery.jobs.create para executar uma tarefa de consulta que contenha uma declaração CREATE FUNCTION.
bigquery.routines.delete Rotina Elimine uma rotina.
bigquery.routines.get Rotina Referenciar uma rotina criada por outra pessoa. Esta autorização também requer bigquery.jobs.create para executar uma tarefa de consulta que faça referência à rotina, e também precisa de autorização para aceder a quaisquer recursos a que a rotina faça referência, como tabelas ou vistas.
bigquery.routines.list Conjunto de dados Listar rotinas no conjunto de dados e mostrar metadados para rotinas.
bigquery.routines.update Rotina Atualize as definições e os metadados das rotinas.
bigquery.routines.getIamPolicy Rotina Aceda aos controlos da rotina.
bigquery.routines.setIamPolicy Rotina Defina os controlos de acesso para a rotina.

Veja os controlos de acesso de uma rotina

Para ver os controlos de acesso de uma rotina, escolha uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto, expanda o conjunto de dados, expanda Rotinas e, de seguida, selecione uma rotina.

  3. Clique em Partilhar.

    Os controlos de acesso da rotina são apresentados no painel Partilhar.

bq

O comando bq get-iam-policy não oferece suporte para a visualização dos controlos de acesso numa rotina.

SQL

A vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES não mostra os controlos de acesso para rotinas.

API

Para obter a política atual, chame o método routines.getIamPolicy.

Revogue o acesso a uma rotina

Para revogar o acesso a uma rotina, selecione uma das seguintes opções:

Consola

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto, expanda um conjunto de dados, expanda Rotinas e, de seguida, selecione uma rotina.

  3. No painel de detalhes, clique em Partilha > Autorizações.

  4. Na caixa de diálogo Autorizações de rotina, expanda o principal cujo acesso quer revogar.

  5. Clique em Remover principal.

  6. Na caixa de diálogo Remover função do principal?, clique em Remover.

  7. Clique em Fechar.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para escrever as informações de rotina existentes (incluindo os controlos de acesso) num ficheiro JSON, use o comando bq get-iam-policy:

    bq get-iam-policy --routine PROJECT_ID:DATASET.ROUTINE > PATH_TO_FILE

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • DATASET: o nome do conjunto de dados que contém a rotina que quer atualizar
    • ROUTINE: o nome do recurso a atualizar
    • PATH_TO_FILE: o caminho para o ficheiro JSON no seu computador local

    No ficheiro de política, o valor de version permanece 1. Este número refere-se à versão do esquema da política de IAM e não à versão da política. O valor de etag value é o número da versão da política.

  3. Faça alterações à secção access do ficheiro JSON. Pode remover qualquer uma das entradas specialGroup: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Também pode remover qualquer um dos seguintes elementos: userByEmail, groupByEmail e domain.

    Por exemplo, a secção access do ficheiro JSON de uma rotina teria o seguinte aspeto:

    {
     "bindings": [
       {
         "role": "roles/bigquery.dataViewer",
         "members": [
           "user:[email protected]",
           "group:[email protected]",
           "domain:google.com",
         ]
       },
     ],
     "etag": "BwWWja0YfJA=",
     "version": 1
    }
  4. Para atualizar a política de acesso, use o comando bq set-iam-policy:

    bq set-iam-policy --routine PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
  5. Para validar as alterações ao controlo de acesso, use novamente o comando get-iam-policy sem escrever as informações num ficheiro:

    bq get-iam-policy --routine --format=prettyjson PROJECT_ID:DATASET.ROUTINE
  6. API

    1. Para obter a política atual, chame o método routines.getIamPolicy.

    2. Edite a política para adicionar principais ou associações, ou ambos. Para ver o formato exigido pela política, consulte o tópico de referência da Política.

Veja os controlos de acesso herdados de um recurso

Pode examinar as funções de IAM herdadas de um recurso através da IU Web do BigQuery. Precisa das autorizações adequadas para ver a herança na consola. Para examinar a herança de um conjunto de dados, uma tabela, uma vista ou uma rotina:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, selecione o conjunto de dados ou expanda o conjunto de dados e selecione uma tabela, uma vista ou uma rotina.

  3. Para um conjunto de dados, clique em Partilha. Para uma tabela, uma vista ou uma rotina, clique em Partilhar.

  4. Verifique se a opção Mostrar funções herdadas na tabela está ativada.

    A opção Mostrar funções herdadas na tabela na consola

  5. Expanda uma função na tabela.

  6. Na coluna Herança, o ícone hexagonal indica se a função foi herdada de um recurso principal.

    O ícone Herdado de um recurso principal

Negue o acesso a um recurso

As políticas de negação de IAM permitem-lhe definir limites de proteção no acesso aos recursos do BigQuery. Pode definir regras de negação que impedem que os responsáveis selecionados usem determinadas autorizações, independentemente das funções que lhes são concedidas.

Para obter informações sobre como criar, atualizar e eliminar políticas de recusa, consulte o artigo Recuse o acesso a recursos.

Casos especiais

Considere os seguintes cenários quando criar políticas de recusa de IAM em algumas autorizações do BigQuery:

  • O acesso a recursos autorizados (vistas, rotinas, conjuntos de dados ou procedimentos armazenados) permite-lhe criar, eliminar ou manipular uma tabela, juntamente com a leitura e a modificação dos dados da tabela, mesmo que não tenha autorização direta para realizar essas operações. Também pode obter dados ou metadados do modelo e invocar outros procedimentos armazenados na tabela subjacente. Esta capacidade implica que os recursos autorizados têm as seguintes autorizações:

    • bigquery.tables.get
    • bigquery.tables.list
    • bigquery.tables.getData
    • bigquery.tables.updateData
    • bigquery.tables.create
    • bigquery.tables.delete
    • bigquery.routines.get
    • bigquery.routines.list
    • bigquery.datasets.get
    • bigquery.models.getData
    • bigquery.models.getMetadata

    Para negar o acesso a estes recursos autorizados, adicione um dos seguintes valores ao campo deniedPrincipal quando criar a política de recusa:

    Valor Exemplo de utilização
    principalSet://goog/public:all Bloqueia todos os principais, incluindo recursos autorizados.
    principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/* Bloqueia todos os recursos autorizados do BigQuery no projeto especificado. PROJECT_NUMBER é um identificador exclusivo gerado automaticamente para o seu projeto do tipo INT64.
  • Para isentar determinados responsáveis da política de recusa, especifique esses responsáveis no campo exceptionPrincipals da política de recusa. Por exemplo, exceptionPrincipals: "principalSet://bigquery.googleapis.com/projects/1234/*".

  • O BigQuery coloca em cache os resultados das consultas de um proprietário da tarefa durante 24 horas, aos quais o proprietário da tarefa pode aceder sem precisar da autorização bigquery.tables.getData na tabela que contém os dados. Por conseguinte, a adição de uma política de negação do IAM à autorização bigquery.tables.getData não bloqueia o acesso aos resultados em cache para o proprietário da tarefa até a cache expirar. Para bloquear o acesso do proprietário da tarefa aos resultados em cache, crie uma política de recusa separada na autorização bigquery.jobs.create.

  • Para evitar o acesso não intencional a dados quando usar políticas de negação para bloquear operações de leitura de dados, recomendamos que também reveja e revogue todas as subscrições existentes no conjunto de dados.

  • Para criar uma política de negação do IAM para ver os controlos de acesso do conjunto de dados, negue as seguintes autorizações:

    • bigquery.datasets.get
    • bigquery.datasets.getIamPolicy
  • Para criar uma política de negação do IAM para atualizar os controlos de acesso ao conjunto de dados, negue as seguintes autorizações:

    • bigquery.datasets.update
    • bigquery.datasets.setIamPolicy

O que se segue?

Saiba como usar o método projects.testIamPermissions para testar o acesso do utilizador a um recurso.