Usar a segurança ao nível da linha com outras funcionalidades do BigQuery

Este documento descreve como usar a segurança de acesso ao nível da linha com outras funcionalidades do BigQuery.

Antes de ler este documento, familiarize-se com a segurança ao nível da linha lendo a Introdução à segurança ao nível da linha do BigQuery e o artigo Trabalhar com a segurança ao nível da linha.

O filtro TRUE

As políticas de acesso ao nível da linha podem filtrar os dados de resultados que vê quando executa consultas. Para executar operações que não sejam de consulta, como DML, precisa de acesso total a todas as linhas da tabela. O acesso total é concedido através da utilização de uma política de acesso ao nível da linha com a expressão de filtro definida como TRUE. Esta política de acesso ao nível da linha é denominada filtro TRUE.

Qualquer utilizador pode receber TRUEacesso a filtros, incluindo uma conta de serviço.

Seguem-se exemplos de operações que não são de consulta:

Exemplo de filtro TRUE

CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);

Funcionalidades que funcionam com o filtro TRUE

Quando usa uma operação DML numa tabela protegida por políticas de acesso ao nível da linha, tem de usar um filtro TRUE, o que implica o acesso a toda a tabela. Todas as operações que não alteram o esquema da tabela mantêm todas as políticas de acesso ao nível da linha na tabela.

Por exemplo, a declaração ALTER TABLE RENAME TO copia as políticas de acesso ao nível da linha da tabela original para a nova tabela. Como outro exemplo, a declaração TRUNCATE TABLE remove todas as linhas de uma tabela, mas mantém o esquema da tabela, bem como todas as políticas de acesso ao nível da linha.

Tarefas de cópia

Para copiar uma tabela com uma ou mais políticas de acesso ao nível da linha, primeiro tem de lhe ser concedido TRUE acesso de filtro na tabela de origem. Todas as políticas de acesso ao nível da linha na tabela de origem também são copiadas para a nova tabela de destino. Se copiar uma tabela de origem sem políticas de acesso ao nível da linha para uma tabela de destino que tenha políticas de acesso ao nível da linha, as políticas de acesso ao nível da linha são removidas da tabela de destino, a menos que seja usada a flag --append_table ou que "writeDisposition": "WRITE_APPEND" seja definido.

As cópias entre regiões são permitidas e todas as políticas são copiadas. As consultas subsequentes podem ser interrompidas após a conclusão da cópia se contiverem referências de tabelas inválidas nas políticas de subconsultas.

As políticas de acesso ao nível da linha numa tabela têm de ter nomes exclusivos. Uma colisão nos nomes das políticas de acesso ao nível da linha durante a cópia resulta num erro de entrada inválida.

Autorizações necessárias para copiar uma tabela com uma política de acesso ao nível da linha

Para copiar uma tabela com uma ou mais políticas de acesso ao nível da linha, tem de ter as seguintes autorizações, além das funções para copiar tabelas e partições.

Autorização Recurso
bigquery.rowAccessPolicies.list A tabela de origem.
bigquery.rowAccessPolicies.getIamPolicy A tabela de origem.
O filtro TRUE A tabela de origem.
bigquery.rowAccessPolicies.create A tabela de destino.
bigquery.rowAccessPolicies.setIamPolicy A tabela de destino.

tabledata.list na API BigQuery

Precisa de acesso de filtro para usar o método tabledata.list na API BigQuery numa tabela com políticas de acesso ao nível da linha.TRUE

DML

Para executar uma declaração DML que atualiza uma tabela com políticas de acesso ao nível da linha, precisa de acesso de filtragem TRUE para a tabela.

Em particular, as declarações MERGE interagem com as políticas de acesso ao nível da linha da seguinte forma:

  • Se uma tabela de destino contiver políticas de acesso ao nível da linha, tem de TRUE filtrar o acesso à tabela de destino.
  • Se uma tabela de origem contiver políticas de acesso ao nível da linha, a declaração MERGE só atua nas linhas visíveis para o utilizador.

Instantâneos de tabelas

Os instantâneos de tabelas suportam a segurança ao nível da linha. As autorizações de que precisa para a tabela base (tabela de origem) e a cópia instantânea da tabela (tabela de destino) são descritas no artigo Autorizações necessárias para copiar uma tabela com uma política de acesso ao nível da linha.

Tabela do BigQuery com colunas JSON

As políticas de acesso ao nível da linha não podem ser aplicadas a colunas JSON. Para saber mais sobre as limitações da segurança ao nível da linha, consulte a secção Limitações.

Gráfico de execução

Não pode usar o gráfico de execução de consultas para tarefas com políticas de acesso ao nível da linha.

Extraia tarefas

Se uma tabela tiver políticas de acesso ao nível da linha, apenas os dados que pode ver são exportados para o Cloud Storage quando executa uma tarefa de extração.

Tabelas particionadas e agrupadas

A segurança ao nível da linha não participa na redução de consultas, que é uma funcionalidade das tabelas particionadas.

Embora a segurança ao nível da linha seja compatível com tabelas particionadas e agrupadas, as políticas de acesso ao nível da linha que filtram os dados das linhas não são aplicadas durante a eliminação de partições. Pode continuar a usar a eliminação de partições numa tabela que usa a segurança ao nível da linha especificando uma cláusula WHERE que opera na coluna de partição. Da mesma forma, as políticas de acesso ao nível da linha não criam vantagens de desempenho para consultas em tabelas agrupadas, mas não interferem com outras filtragens que aplicar.

A eliminação de consultas é realizada durante a execução das políticas de acesso ao nível da linha através dos filtros com as políticas.

Mude o nome de uma tabela

Não precisa de acesso de filtragem TRUE para mudar o nome de uma tabela com uma ou mais políticas de acesso ao nível da linha. Pode mudar o nome de uma tabela com uma declaração DDL.

Em alternativa, também pode copiar uma tabela e atribuir um nome diferente à tabela de destino. Se a tabela de origem tiver uma política de acesso ao nível da linha, consulte os trabalhos de cópia de tabelas nesta página para mais informações.

Atualizações de streaming

Para realizar operações de tabelas de streaming UPDATE ou DELETE com a captura de dados de alterações, tem de ter acesso ao filtro TRUE.

Viagem no tempo

Apenas um administrador da tabela pode aceder aos dados do histórico de uma tabela que tenha, ou já tenha tido, políticas de acesso ao nível da linha. Os outros utilizadores recebem um erro access denied se usarem um decorador de viagem no tempo numa tabela que tenha tido acesso ao nível da linha. Para mais informações, consulte os artigos Viagem no tempo e acesso ao nível da linha.

Vistas lógicas, materializadas e autorizadas

Esta secção descreve diferentes tipos de visualizações de propriedade do BigQuery e como interagem com a segurança ao nível da linha.

Vistas lógicas ou materializadas

As vistas lógicas ou materializadas são criadas a partir de consultas em tabelas. Normalmente, os resultados da consulta são um subconjunto dos dados da tabela.

Os dados apresentados em qualquer tipo de vista são filtrados de acordo com as políticas de acesso ao nível da linha da tabela de origem subjacente. No entanto, não pode fazer referência a vistas ou vistas materializadas em políticas de acesso ao nível da linha.

Desempenho das vistas materializadas

Além disso, quando uma vista materializada é derivada de uma tabela subjacente que tem políticas de acesso ao nível da linha, o desempenho da consulta é o mesmo que quando consulta a tabela de origem diretamente. Por outras palavras, se a tabela de origem tiver segurança ao nível das linhas, não vê as vantagens de desempenho típicas da consulta de uma vista materializada em comparação com a consulta da tabela de origem.

Vistas autorizadas

Também pode autorizar uma vista lógica ou materializada, o que significa partilhar a vista com utilizadores ou grupos específicos (diretores). Em seguida, os principais podem consultar uma vista, mas não têm acesso à tabela subjacente. Para mais informações, consulte o artigo Vistas autorizadas.

Consultas com carateres universais

As consultas com carateres universais em tabelas com políticas de acesso ao nível da linha falham com um erro INVALID_INPUT.

O que se segue?