Impacto nas gravações do controlo de acesso ao nível da coluna

Esta página explica o impacto nas gravações quando usa o controlo de acesso ao nível da coluna do BigQuery para restringir o acesso aos dados ao nível da coluna. Para obter informações gerais sobre o controlo de acesso ao nível da coluna, consulte o artigo Introdução ao controlo de acesso ao nível da coluna do BigQuery.

O controlo de acesso ao nível da coluna requer que um utilizador tenha autorização de leitura para colunas protegidas por etiquetas de política. Algumas operações de escrita têm de ler os dados das colunas antes de escreverem efetivamente numa coluna. Para essas operações, o BigQuery verifica a autorização de leitura do utilizador para garantir que o utilizador tem acesso à coluna. Por exemplo, se um utilizador estiver a atualizar dados que incluam a escrita numa coluna protegida, o utilizador tem de ter autorização de leitura para a coluna protegida. Se o utilizador estiver a inserir uma nova linha de dados que inclua a escrita numa coluna protegida, não precisa de acesso de leitura à coluna protegida. No entanto, o utilizador que escreve essa linha não consegue ler os dados escritos recentemente, a menos que tenha autorização de leitura para as colunas protegidas.

As secções seguintes fornecem detalhes sobre diferentes tipos de operações de escrita. Os exemplos neste tópico usam tabelas customers com o seguinte esquema:

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

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

Inserir dados

Para uma declaração INSERT, o BigQuery não verifica a autorização de leitor detalhada nas etiquetas de políticas nas colunas analisadas nem nas colunas atualizadas. Isto deve-se ao facto de um INSERT não exigir a leitura de nenhum dos dados das colunas. No entanto, mesmo que insira valores com êxito em colunas para as quais não tem autorização de leitura, uma vez inseridos, os valores são protegidos conforme esperado.

Eliminar, atualizar e unir dados

Para as declarações DELETE, UPDATE e MERGE, o BigQuery verifica se existe a autorização de leitor detalhada nas colunas analisadas. As colunas não são analisadas por estas declarações, a menos que inclua uma cláusula WHERE ou alguma outra cláusula ou subconsulta que exija que a consulta leia dados.

Carregar dados

Quando carrega dados (por exemplo, a partir do Cloud Storage ou de ficheiros locais) para uma tabela, o BigQuery não verifica a autorização de leitor detalhada nas colunas da tabela de destino. Isto acontece porque o carregamento de dados não requer a leitura de conteúdo da tabela de destino.

O streaming para o BigQuery é semelhante ao LOAD e ao INSERT. O BigQuery permite-lhe transmitir dados para uma coluna de tabela de destino, mesmo que não tenha a autorização de leitor detalhada.

Copiar dados

Para uma operação de cópia, o BigQuery verifica se o utilizador tem a autorização de leitor detalhada na tabela de origem. O BigQuery não verifica se o utilizador tem a autorização de leitor detalhada para as colunas na tabela de destino. Tal como acontece com LOAD, INSERT e o streaming, depois de a cópia estar concluída, não pode ler os dados que acabaram de ser escritos, a menos que tenha a autorização de leitor detalhada para as colunas da tabela de destino.

Exemplos de DML

INSERT

Exemplo:

INSERT INTO customers VALUES('alice', 85, '123-456-7890');
Colunas de origem Atualize colunas
Etiquetas de políticas verificadas para o Fine-Grained Reader? N/A Não
Colunas selecionadas 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 Atualize colunas
Etiquetas de políticas verificadas para o Fine-Grained Reader? Sim Não
Colunas selecionadas user_id
credit_score
credit_score

DELETE

Exemplo:

DELETE customers WHERE credit_score = 0
Colunas de origem Atualize colunas
Etiquetas de políticas verificadas para o Fine-Grained Reader? Sim Não
Colunas selecionadas credit_score user_id
credit_score
ssn

Carregar exemplos

Carregar a partir de um ficheiro local ou do Cloud Storage

Exemplo:

load --source_format=CSV samples.customers \
  ./customers_data.csv \
  ./customers_schema.json
Colunas de origem Atualize colunas
Etiquetas de políticas verificadas para o Fine-Grained Reader? N/A Não
Colunas selecionadas N/A user_id
credit_score
ssn

Streaming

Não são verificadas etiquetas de políticas quando a transmissão é feita com a API Legacy Streaming insertAll ou a API Storage Write. Para a captura de dados de alterações do BigQuery, as etiquetas de políticas são verificadas nas colunas de chave primária.

Copiar exemplos

Anexar dados a uma tabela existente

Exemplo:

cp -a samples.customers samples.customers_dest
Colunas de origem Atualize colunas
Etiquetas de políticas verificadas para o Fine-Grained Reader? Sim Não
Colunas selecionadas customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn

Guardar resultados de consultas numa 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 Atualize colunas
Etiquetas de políticas verificadas para o Fine-Grained Reader? Sim Não
Colunas selecionadas customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn