Como usar a segurança no nível da linha com outros recursos do BigQuery
Neste documento, você verá como usar a segurança de acesso no nível da linha com outros recursos do BigQuery.
Antes de ler este documento, familiarize-se com a segurança no nível da linha lendo a Introdução à segurança no nível da linha do BigQuery e Como trabalhar com a segurança no nível da linha.
O filtro TRUE
.
As políticas de acesso no nível da linha podem filtrar os dados do resultado vistos ao executar
consultas. Para executar operações não relacionadas a consultas, como a DML, é necessário ter acesso total
a todas as linhas da tabela. O acesso total é concedido
usando uma política de acesso de linha com a expressão de filtro definida como TRUE
. Essa
política de acesso no nível da linha é chamada de filtro TRUE
.
Qualquer usuário pode receber acesso ao filtro TRUE
, incluindo uma conta de serviço.
Exemplos de operações não consulta são:
- Outras APIs do BigQuery, como a API BigQuery Storage Read .
- Alguns comandos da
ferramenta de linha de comando
bq
, como o comandobq head
. - Como 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);
Recursos que funcionam com o filtro TRUE
Ao usar uma operação DML
em uma tabela protegida por políticas de acesso de linha, é necessário usar um filtro TRUE
que
implica acesso a toda a tabela. Todas as operações que não alteram o esquema
da tabela mantêm as políticas de acesso de linha na tabela.
Por exemplo, a instrução ALTER TABLE RENAME
TO
copia as políticas de acesso de linha da tabela original para a nova.
Como outro exemplo, a instrução TRUNCATE
TABLE
remove todas as linhas de uma tabela, mas mantém o esquema da tabela, bem como
qualquer política de acesso de linha.
Jobs de cópia
Para copiar uma tabela que tenha uma ou mais
políticas de acesso da linha, é necessário ter acesso de filtro TRUE
na
tabela de origem. Todas as políticas de acesso no nível da linha na tabela de origem também
são copiadas para a nova tabela de destino. Se você copiar uma tabela de origem sem
políticas de acesso no nível da linha para uma tabela de destino que tenha políticas de acesso
no nível da linha,
as políticas de acesso no nível da linha vão ser removidas da tabela de destino,
a menos que--append_table
seja usada ou"writeDisposition": "WRITE_APPEND"
esteja definido.
Cópias entre regiões são permitidas, e todas as políticas são copiadas. As consultas subsequentes poderão ser interrompidas após a conclusão da cópia se elas contiverem referências de tabela inválidas nas políticas de subconsulta.
As políticas de acesso no nível da linha em uma tabela precisam ter nomes exclusivos. Um conflito em nomes de políticas de acesso no nível da linha durante a cópia resulta em um erro de entrada inválido.
Permissões necessárias para copiar uma tabela com uma política de acesso no nível da linha
Para copiar uma tabela com uma ou mais políticas de acesso no nível da linha, é necessário ter as seguintes permissões, além das funções para copiar tabelas e partições.
Permissã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
Você precisa de acesso ao filtro TRUE
para usar o método tabledata.list
na
API BigQuery em uma tabela com políticas de acesso no nível da linha.
DML
Para executar uma instrução DML que atualiza uma tabela que tem políticas
de acesso no nível da linha, é necessário ter o acesso de filtro TRUE
à tabela.
As instruções MERGE
interagem com as políticas de acesso no nível da linha da
seguinte maneira:
- Se uma tabela de destino contiver políticas de acesso no nível da linha, será necessário ter
acesso de filtro
TRUE
à tabela de destino. - Se uma tabela de origem contiver políticas de acesso no nível da linha, a instrução
MERGE
agirá apenas nas linhas visíveis para o usuário.
Snapshots da tabela
Os snapshots da tabela são compatíveis com a segurança no nível da linha. As permissões necessárias para a tabela base (tabela de origem) e para o snapshot da tabela (tabela de destino) são descritas em Permissões necessárias para copiar uma tabela com uma política de acesso no nível da linha.
Tabela do BigQuery com colunas JSON
Não é possível aplicar políticas de acesso no nível da linha em colunas JSON. Para saber mais sobre as limitações da segurança no nível da linha, consulte Limitações.
Gráfico de execução
Não é possível usar o gráfico de execução de consultas para jobs com políticas de acesso no nível da linha.
Jobs de extração
Se uma tabela tiver políticas de acesso no nível da linha, somente os dados que você poderá visualizar serão exportados para o Cloud Storage quando você executar um job de extração.
Tabelas particionadas e em cluster
A segurança no nível da linha não participa da remoção de consultas, que é um recurso das tabelas particionadas.
Embora a segurança no nível da linha seja compatível com tabelas particionadas e
em cluster, as políticas de acesso no nível da linha que filtram os dados da linha não são aplicadas
durante a remoção da partição. Ainda é possível usar a remoção de partições em uma tabela
que utiliza a segurança no nível da linha especificando uma cláusula WHERE
que opere
na coluna da partição. Da mesma forma, as políticas de acesso no nível da linha por si só
não criam nenhum benefício de desempenho para consultas nas tabelas em cluster,
mas não interferem em outros filtros aplicados por você.
A remoção de consultas é realizada durante a execução de políticas de acesso no nível da linha usando os filtros com as políticas.
Renomear uma tabela
Não é necessário ter acesso de filtro TRUE
para renomear uma tabela com uma ou mais políticas de acesso
de linha. É possível
renomear uma tabela com uma instrução DDL.
Como alternativa, é possível copiar uma tabela e atribuir um nome diferente à tabela de destino. Se a tabela de origem tiver uma política de acesso no nível da linha, consulte os jobs de cópia de tabela nesta página para mais informações.
atualizações de streaming
Para executar operações de tabela de streaming UPDATE
ou DELETE
com captura de dados de alteração, é necessário ter acesso ao filtro TRUE
.
Viagem no tempo
Somente o administrador de uma tabela pode acessar dados históricos de uma tabela que já tenha políticas de acesso no nível da linha. Outros usuários receberão um erro access
denied
se usarem um decorador de viagem no tempo em uma tabela que teve acesso no nível da linha. Para mais informações, consulte Viagem no tempo e acesso no nível da linha.
Visualizações lógicas, materializadas e autorizadas
Esta seção descreve diferentes tipos de visualizações do BigQuery e como elas interagem com a segurança no nível da linha.
Visualizações lógicas ou materializadas
As visualizações lógicas ou materializadas são criadas a partir de consultas em tabelas. Os resultados da consulta geralmente são um subconjunto dos dados da tabela.
Os dados exibidos em qualquer tipo de visualização são filtrados de acordo com as políticas de acesso no nível da linha da tabela de origem subjacente. No entanto, não é possível referenciar visualizações ou visualizações materializadas em políticas de acesso no nível da linha.
Desempenho das visualizações materializadas
Além disso, quando uma visualização materializada é derivada de uma tabela subjacente que tem políticas de acesso no nível da linha, o desempenho da consulta é o mesmo de quando a tabela de origem é consultada diretamente. Em outras palavras, se a tabela de origem tiver segurança no nível da linha, você não verá os benefícios de desempenho típicos de consultar uma visualização materializada em comparação à tabela de origem.
Visualizações autorizadas
Também é possível autorizar uma visualização lógica ou materializada, ou seja, compartilhar a visualização com usuários ou grupos específicos (princípios). Os administradores podem consultar uma visualização, mas não têm acesso à tabela subjacente. Para mais informações, consulte Visualizações autorizadas.
Consultas com caracteres curinga
As consultas com caracteres curinga em
tabelas com políticas de acesso no nível da linha falham com um erro INVALID_INPUT
.
A seguir
- Para mais informações sobre as práticas recomendadas para políticas de acesso no nível da linha, consulte Práticas recomendadas de segurança no nível da linha no BigQuery.