Impacto em gravações do controle de acesso no nível da coluna

Nesta página, explicamos o impacto das gravações ao usar o controle de acesso no nível da coluna do BigQuery para restringir o acesso aos dados no nível da coluna. Para informações gerais sobre o controle de acesso no nível da coluna, consulte Introdução ao controle de acesso no nível da coluna do BigQuery.

O controle de acesso no nível da coluna exige que um usuário tenha permissão de leitura para colunas protegidas por tags de política. Algumas operações de gravação precisam ler os dados da coluna antes de gravar em uma coluna. Para essas operações, o BigQuery verifica a permissão de leitura do usuário para garantir que ele tenha acesso à coluna. Por exemplo, se um usuário atualizar dados que incluam a gravação em uma coluna protegida, o usuário precisará ter permissão de leitura na coluna protegida. Se o usuário estiver inserindo uma nova linha de dados que inclui a gravação em uma coluna protegida, ele não precisará de acesso de leitura para a coluna protegida. No entanto, o usuário que grava tal linha não poderá ler os dados gravados recentemente, a menos que tenha permissão de leitura para as colunas protegidas.

As seções a seguir fornecem detalhes sobre diferentes tipos de operações de gravação. Os exemplos neste tópico usam tabelas customers com o seguinte esquema:

Nome do campo Tipo Modo Tag de política
user_id STRING OBRIGATÓRIO policy-tag-1
credit_score INTEGER NULLABLE policy-tag-2
ssn STRING NULLABLE policy-tag-3

Como usar a linguagem de manipulação de dados (DML) do BigQuery

Como inserir dados

Para uma instrução INSERT, o BigQuery não verifica a permissão do Leitor de controle refinado nas tags de política nem nas colunas verificadas nem nas atualizadas. Isso ocorre porque um INSERT não requer a leitura de nenhum dos dados da coluna. No entanto, mesmo se você inserir valores em colunas em que não tem permissão de leitura, depois de inseridos, os valores serão protegidos conforme o esperado.

Como excluir, atualizar e mesclar dados

Para instruções DELETE, UPDATE e MERGE, o BigQuery verifica a permissão de leitor de controle refinado nas colunas verificadas. As colunas não são verificadas por essas instruções, a menos que você inclua uma cláusula WHERE ou alguma outra cláusula ou subconsulta que exija a consulta para ler dados.

Carregando dados

Ao carregar dados (por exemplo, do Cloud Storage ou de arquivos locais) a uma tabela, o BigQuery não verifica a permissão do Leitor refinado nas colunas da tabela de destino. Isso ocorre porque o carregamento de dados não requer a leitura de conteúdo da tabela de destino.

O streaming no BigQuery é semelhante a LOAD e INSERT. O BigQuery permite que você transmita dados para uma coluna da tabela de destino, mesmo que você não tenha a permissão do Leitor em granularidade fina.

Como copiar dados

Para uma operação de cópia, o BigQuery verifica se o usuário tem a permissão do Leitor refinado na tabela de origem. O BigQuery não verifica se o usuário tem permissão de Leitor de controle refinado em colunas na tabela de destino. Como LOAD, INSERT e streaming, após a conclusão da cópia, não será possível ler os dados que foram gravados, a menos que você tenha a permissão de Leitor controle refinado às colunas da tabela de destino.

Exemplos de DML

INSERT

Exemplo:

INSERT INTO customers VALUES('alice', 85, '123-456-7890');
Colunas de origem Atualizar colunas
Tags de política verificadas para leitor de controle refinado? N/A Não
Colunas verificadas N/A user_id
credit_score
ssn

UPDATE

Exemplo:

UPDATE customers SET credit_score = 0
  WHERE user_id LIKE 'alice%' AND credit_score < 30
Colunas de origem Atualizar colunas
Tags de política verificadas para leitor de controle refinado? Sim Não
Colunas verificadas user_id
credit_score
credit_score

DELETE

Exemplo:

DELETE customers WHERE credit_score = 0
Colunas de origem Atualizar colunas
Tags de política verificadas para leitor de controle refinado? Sim Não
Colunas verificadas credit_score user_id
credit_score
ssn

Carregar exemplos

Como fazer um carregamento a partir de um arquivo local ou do Cloud Storage

Exemplo:

load --source_format=CSV samples.customers \
  ./customers_data.csv \
  ./customers_schema.json
Colunas de origem Atualizar colunas
Tags de política verificadas para leitor de controle refinado? N/A Não
Colunas verificadas N/A user_id
credit_score
ssn

Streaming

Nenhuma tag de política é verificada durante o streaming com a API de streaming legada insertAll ou a API Storage Write. Para a captura de dados alterados no BigQuery, as tags de política são verificadas nas colunas de chave primária.

Copiar exemplos

Como anexar dados a uma tabela atual

Exemplo:

cp -a samples.customers samples.customers_dest
Colunas de origem Atualizar colunas
Tags de política verificadas para leitor de controle refinado? Sim Não
Colunas verificadas customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn

Como salvar resultados de consulta em uma tabela de destino

Exemplo:

query --use_legacy_sql=false \
--max_rows=0 \
--destination_table samples.customers_dest \
--append_table "SELECT * FROM samples.customers LIMIT 10;"
Colunas de origem Atualizar colunas
Tags de política verificadas para leitor de controle refinado? Sim Não
Colunas verificadas customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn