Como controlar o acesso a conjuntos de dados
Neste documento, descreveremos como controlar o acesso a conjuntos de dados no BigQuery.
Além disso, você também pode conferir os tópicos a seguir:
- Controlar o acesso nos níveis da tabela e da visualização.
- Controlar o acesso em um nível superior na hierarquia de recursos do IAM.
Visão geral
As permissões no nível do conjunto de dados determinam os usuários, grupos e contas de serviço que têm
permissão para acessar as tabelas, visualizações e dados da tabela em um conjunto de dados específico. Por
exemplo, se você conceder o papel de gerenciamento de identidade e acesso (IAM, na sigla em inglês) bigquery.dataOwner
a um
usuário em um conjunto de dados específico, ele poderá criar, atualizar e excluir tabelas e
visualizações no conjunto de dados.
É possível aplicar controles de acesso durante a criação do conjunto de dados chamando o método da API
datasets.insert
.
Não é possível aplicar controles de acesso durante a criação do conjunto de dados no
console do Google Cloud, na ferramenta de linha de comando bq
ou nas instruções da linguagem de definição de dados (DDL).
É possível aplicar controles de acesso a um conjunto de dados depois que ele é criado das seguintes maneiras:
- usando o console do Cloud;
- usando as instruções DCL
GRANT
eREVOKE
. - use o comando
bq update
na ferramenta de linha de comandobq
. - Chamada do método de API
datasets.patch
- usando bibliotecas de cliente.
Antes de começar
Conceda os papéis do IAM que dão aos usuários as permissões necessárias para executar cada tarefa neste documento.
Permissões necessárias
Para controlar o acesso a um conjunto de dados, você precisa das seguintes permissões do IAM:
bigquery.datasets.update
bigquery.datasets.get
bigquery.datasets.getIamPolicy
(permite controlar o acesso a um conjunto de dados usando o console do Cloud)bigquery.datasets.setIamPolicy
(permite controlar o acesso a um conjunto de dados usando o console do Cloud)
O papel predefinido do IAM roles/bigquery.dataOwner
inclui as permissões necessárias para controlar o acesso a um conjunto de dados.
Para mais informações sobre papéis e permissões do IAM no BigQuery, consulte Papéis e permissões predefinidos.
Como conceder acesso a um conjunto de dados
Para conceder acesso a um conjunto de dados, faça o seguinte:
Console
No painel Explorer, expanda o projeto e selecione um conjunto de dados.
No painel de detalhes, clique em Compartilhamento > Permissões.
Clique em Adicionar principal.
No campo Novos participantes, digite a entidade que você quer adicionar. É possível adicionar qualquer uma das entidades a seguir:
- E-mail da Conta do Google: concede acesso ao conjunto de dados a uma conta individual do Google.
- Grupo do Google: concede acesso ao conjunto de dados a todos os membros de um grupo do Google.
- Domínio do Google Apps: concede acesso ao conjunto de dados a todos os usuários e grupos em um domínio do Google.
- Conta de serviço: concede acesso ao conjunto de dados a uma conta de serviço.
- Qualquer pessoa: insira
allUsers
para conceder acesso ao público em geral. - Todas as Contas do Google: insira
allAuthenticatedUsers
para conceder acesso a todas as contas de serviço e a todos os usuários da Internet que se autenticaram com uma Conta do Google. Por exemplo,user@gmail.com
.
Em Selecionar um papel, clique em BigQuery e escolha um papel de IAM predefinido apropriado para os novos membros. Para mais informações sobre as permissões atribuídas a cada papel predefinido do BigQuery, consulte a seção Papéis da página de controle de acesso.
Clique em Concluído.
SQL
Use a seguinte instrução GRANT
para conceder o
papel Visualizador de dados (roles/bigquery.dataViewer
) ao usuário joe@example.com
no seu conjunto de dados.
GRANT `roles/bigquery.dataViewer`
ON SCHEMA DATASET
TO "user:joe@example.com"
Substitua DATASET
pelo nome do conjunto de dados em que
o recurso está.
Saiba mais sobre a instrução DCL GRANT
em
Instruções da linguagem de controle de dados em SQL padrão.
bq
Use o comando
show
para gravar as informações atuais do conjunto de dados, incluindo controles de acesso, em um arquivo JSON. Se o conjunto de dados estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato:project_id:dataset
.bq show \ --format=prettyjson \ project_id:dataset > path_to_file
Substitua:
- project_id é o ID do projeto.
- dataset é o nome do conjunto de dados;
- path_to_file é o caminho do arquivo JSON na sua máquina local.
Exemplos:
Digite o comando a seguir para gravar os controles de acesso para
mydataset
em um arquivo JSON.mydataset
está no projeto padrão.bq show --format=prettyjson mydataset > /tmp/mydataset.json
Digite o comando a seguir para gravar os controles de acesso para
mydataset
em um arquivo JSON.mydataset
está emmyotherproject
.bq show --format=prettyjson \ myotherproject:mydataset > /tmp/mydataset.json
Faça suas alterações na seção
"access"
do arquivo JSON. É possível adicionar qualquer uma das entradasspecialGroup
:projectOwners
,projectWriters
,projectReaders
eallAuthenticatedUsers
. É possível também adicionar ou modificar qualquer um dos itens a seguir:userByEmail
,groupByEmail
edomain
.Por exemplo, a seção "access" do arquivo JSON de um conjunto de dados tem esta aparência:
{ "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": "WRITER", "userByEmail": "service_account_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Quando as edições estiverem concluídas, use o comando
update
e inclua o arquivo JSON usando a sinalização--source
. Se o conjunto de dados estiver em um projeto diferente do padrão, 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
Substitua:
- path_to_file é o caminho do arquivo JSON na sua máquina local.
- project_id é o ID do projeto.
- dataset é o nome do conjunto de dados;
Exemplos:
Digite o comando a seguir para atualizar os controles de acesso para
mydataset
.mydataset
está no projeto padrão.bq update --source /tmp/mydataset.json mydataset
Digite o comando a seguir para atualizar os controles de acesso para
mydataset
.mydataset
está emmyotherproject
.bq update --source /tmp/mydataset.json myotherproject:mydataset
Para verificar as alterações no controle de acesso, insira o comando
show
novamente sem gravar as informações em um arquivo.bq show --format=prettyjson dataset
ou
bq show --format=prettyjson project_id:dataset
API
Ligue para datasets.insert
com um recurso de conjunto de dados definido para aplicar controles de acesso quando o conjunto de dados for criado. Chame
datasets.patch
e use
a propriedade access
no recurso Dataset
para atualizar os controles de
acesso.
Como datasets.update
substitui todo o recurso do conjunto de dados, é melhor usar o método datasets.patch
para atualizar os controles de acesso.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Defina a propriedade dataset.access_entries com os controles de acesso de um conjunto de dados. Em seguida, chame a função client.update_dataset() para atualizar a propriedade.Como revogar o acesso a um conjunto de dados
Para revogar o acesso a um conjunto de dados, faça o seguinte:
Console
No painel Explorer, expanda o projeto e selecione um conjunto de dados.
No painel de detalhes, clique em Compartilhamento > Permissões.
Na caixa de diálogo Permissões do conjunto de dados, expanda o papel com a assinatura que você quer alterar.
Clique em Excluir
na conta de usuário que você quer remover.Na caixa de diálogo Remover membro?, clique em Remover.
Clique em Concluído.
SQL
Use a seguinte instrução REVOKE
para remover o
papel Visualizador de dados (roles/bigquery.dataViewer
) do usuário joe@example.com
no seu conjunto de dados.
REVOKE `roles/bigquery.dataViewer`
ON SCHEMA DATASET
FROM "user:joe@example.com"
Substitua DATASET
pelo nome do conjunto de dados em que
o recurso está.
Saiba mais sobre a instrução DCL REVOKE
em
Instruções da linguagem de controle de dados em SQL padrão.
bq
Use o comando
show
para gravar as informações atuais do conjunto de dados, incluindo controles de acesso, em um arquivo JSON. Se o conjunto de dados estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato:project_id:dataset
.bq show \ --format=prettyjson \ project_id:dataset > path_to_file
Substitua:
- project_id é o ID do projeto.
- dataset é o nome do conjunto de dados;
- path_to_file é o caminho do arquivo JSON na sua máquina local.
Exemplos:
Digite o comando a seguir para gravar os controles de acesso para
mydataset
em um arquivo JSON.mydataset
está no projeto padrão.bq show --format=prettyjson mydataset > /tmp/mydataset.json
Digite o comando a seguir para gravar os controles de acesso para
mydataset
em um arquivo JSON.mydataset
está emmyotherproject
.bq show --format=prettyjson \ myotherproject:mydataset > /tmp/mydataset.json
Faça suas alterações na seção
"access"
do arquivo JSON. É possível remover qualquer uma das entradasspecialGroup
:projectOwners
,projectWriters
,projectReaders
eallAuthenticatedUsers
. Também é possível remover qualquer um dos itens a seguir:userByEmail
,groupByEmail
edomain
.Por exemplo, a seção "access" do arquivo JSON de um conjunto de dados tem esta aparência:
{ "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" } ], ... }
Quando as edições estiverem concluídas, use o comando
update
e inclua o arquivo JSON usando a sinalização--source
. Se o conjunto de dados estiver em um projeto diferente do padrão, 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
Substitua:
- path_to_file é o caminho do arquivo JSON na sua máquina local.
- project_id é o ID do projeto.
- dataset é o nome do conjunto de dados;
Exemplos:
Digite o comando a seguir para atualizar os controles de acesso para
mydataset
.mydataset
está no projeto padrão.bq update --source /tmp/mydataset.json mydataset
Digite o comando a seguir para atualizar os controles de acesso para
mydataset
.mydataset
está emmyotherproject
.bq update --source /tmp/mydataset.json myotherproject:mydataset
Para verificar as alterações no controle de acesso, insira o comando
show
novamente sem gravar as informações em um arquivo.bq show --format=prettyjson dataset
ou
bq show --format=prettyjson project_id:dataset
API
Chame datasets.patch
e use a propriedade access
no recurso Dataset
para atualizar os
controles de acesso.
Como datasets.update
substitui todo o recurso do conjunto de dados, é melhor usar o método datasets.patch
para atualizar os controles de acesso.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Defina a propriedade dataset.access_entries com os controles de acesso de um conjunto de dados. Em seguida, chame a função client.update_dataset() para atualizar a propriedade.Próximas etapas
- Para mais informações sobre como criar conjuntos de dados, consulte Como criar conjuntos de dados.
- Para mais informações sobre como listar conjuntos de dados em um projeto, consulte Como listar conjuntos de dados.
- Para mais informações sobre metadados do conjunto de dados, consulte Como receber informações sobre conjuntos de dados.
- Para mais informações sobre como alterar propriedades do conjunto de dados, consulte Como atualizar conjuntos de dados.
- Para mais informações sobre como criar e gerenciar rótulos, consulte esta página.