Controle de acesso refinado na computação de usuário único

Este artigo apresenta a funcionalidade de filtragem de dados que permite o controle de acesso refinado em consultas executadas na computação de usuário único (computação para todas as finalidades ou trabalhos configurada com o modo de acesso de usuário único). Consulte Modos de acesso.

Essa filtragem de dados é executada nos bastidores usando a computação sem servidor.

Por que algumas consultas na computação de usuário único exigem filtragem de dados?

O Catálogo do Unity permite controlar o acesso a dados tabulares no nível de coluna e linha (também conhecido como controle de acesso refinado) usando os seguintes recursos:

Quando os usuários consultam exibições que excluem dados de tabelas referenciadas ou tabelas de consulta que aplicam filtros e máscaras, eles podem usar qualquer um dos seguintes recursos de computação sem limitações:

  • SQL warehouses
  • Computação compartilhada

No entanto, se você usar a computação de usuário único para executar essas consultas, a computação e seu workspace deverão atender a requisitos específicos:

Se o recurso de computação e o workspace de usuário único atenderem a esses requisitos, a filtragem de dados será executada automaticamente sempre que você consultar uma exibição ou tabela que usa controle de acesso refinado.

Suporte para exibições materializadas, tabelas de streaming e exibições padrão

Além de exibições dinâmicas, filtros de linha e máscaras de coluna, a filtragem de dados também permite consultas nas seguintes exibições e tabelas que não têm suporte na computação de usuário único que está executando o Databricks Runtime 15.3 e inferior:

  • Exibições padrão

    Na computação de usuário único que executa o Databricks Runtime 15.3 e inferior, o usuário que executa a consulta na exibição deve ter SELECT nas tabelas e exibições referenciadas pela exibição, o que significa que você não pode usar exibições para fornecer controle de acesso refinado. No Databricks Runtime 15.4 com filtragem de dados, o usuário que consulta a exibição não precisa ter acesso às tabelas e exibições referenciadas.

  • Tabelas de streaming

  • Exibições materializadas

Como funciona a filtragem de dados na computação de usuário único?

Sempre que uma consulta acessa os seguintes objetos de banco de dados, o recurso de computação de usuário único passa a consulta para a computação sem servidor para executar a filtragem de dados:

  • Exibições criadas sobre tabelas nas quais o usuário não tem o privilégio SELECT em
  • Exibições dinâmicas
  • Tabelas com filtros de linha ou máscaras de coluna definidas
  • Exibições materializadas e tabelas de streaming

No diagrama a seguir, um usuário tem SELECT no table_1, view_2 e table_w_rls que tem filtros de linha aplicados. O usuário não tem SELECT no table_2, que é referenciado por view_2.

Diagrama que mostra como funciona a filtragem de dados

A consulta é table_1 tratada inteiramente pelo recurso de computação de usuário único, pois nenhuma filtragem é necessária. As consultas no view_2 e table_w_rls exigem filtragem de dados para retornar os dados aos quais o usuário tem acesso. Essas consultas são tratadas pela funcionalidade de filtragem de dados na computação sem servidor.

Quais são os custos incorridos?

Os clientes são cobrados pelos recursos da computação sem servidor usados para executar operações de filtragem de dados. Para obter informações sobre preços, confira Camadas de Plataforma e Complementos.

Você pode consultar a tabela de uso de cobrança do sistema para ver quanto foi cobrado. Por exemplo, a consulta a seguir divide os custos da computação por usuário:

SELECT usage_date,
sku_name,
 identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by FGAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2024-08-01' AND '2024-09-01'
 AND billing_origin_product = 'FINE_GRAINED_ACCESS_CONTROL'
GROUP BY 1, 2, 3 ORDER BY 1;

Exibir o desempenho da consulta quando a filtragem de dados estiver ativada

A interface do usuário do Spark para computação de usuário único exibe métricas que você pode usar para entender o desempenho de suas consultas. Para cada consulta executada no recurso de computação, a guia SQL/Dataframe exibe a representação do grafo de consulta. Se uma consulta estiver envolvida na filtragem de dados, a interface do usuário exibirá um nó do operador RemoteSparkConnectScan na parte inferior do grafo. Esse nó exibe métricas que você pode usar para investigar o desempenho da consulta. Confira Exibir informações da computação na interface do usuário do Apache Spark.

SparkUI mostrando o nó RemoteSparkConnectScan

Expanda o nó do operador RemoteSparkConnectScan para ver as métricas que abordam perguntas como as seguintes:

  • Quanto tempo levou a filtragem de dados? Veja "tempo total de execução remota".
  • Quantas linhas permaneceram após a filtragem de dados? Veja "saída de linhas".
  • Quantos dados (em bytes) foram retornados após a filtragem de dados? Veja "tamanho da saída de linhas".
  • Quantos arquivos de dados foram removidos da partição e não precisaram ser lidos no armazenamento? Exibir "Arquivos removidos" e "Tamanho dos arquivos removidos".
  • Quantos arquivos de dados não puderam ser removidos e tiveram que ser lidos do armazenamento? Veja "Arquivos lidos" e "Tamanho dos arquivos lidos".
  • Dos arquivos que tinham que ser lidos, quantos já estavam no cache? Veja "Tamanho de acertos do cache" e "Tamanho de erros do cache".

Limitações

  • Não há suporte para operações de gravação ou atualização de tabelas em tabelas que tenham filtros de linha ou máscaras de coluna aplicados.

    Especificamente, não há suporte para operações de DML, como INSERT, DELETE, UPDATE, REFRESH TABLE e MERGE. Você só pode ler (SELECT) dessas tabelas.

  • As autojunções são bloqueadas por padrão quando a filtragem de dados é chamada, mas você pode permiti-las definindo spark.databricks.remoteFiltering.blockSelfJoins como false no computador em que está executando esses comandos.

    Antes de habilitar as autojunções em um único recurso de computação do usuário, lembre-se de que uma consulta de autojunção manipulada pelo recurso de filtragem de dados pode retornar diferentes instantâneos da mesma tabela remota.