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 TRUE
acesso a filtros, incluindo uma conta de serviço.
Seguem-se exemplos de operações que não são de consulta:
- Outras APIs BigQuery, como a API BigQuery Storage Read.
- Alguns comandos da
bq
ferramenta de linha de comandos, como o comandobq head
. - Copiar uma tabela
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?
- Para informações sobre as práticas recomendadas para políticas de acesso ao nível da linha, consulte o artigo Práticas recomendadas para a segurança ao nível da linha no BigQuery.