Filtros de linha e máscaras de coluna
Esta página fornece orientação sobre o uso de filtros de linha e máscaras de coluna para filtrar dados confidenciais em suas tabelas.
O que são filtros de linha?
Os filtros de linha permitem controlar quais linhas um usuário pode acessar em uma tabela com base na lógica personalizada. No momento da consulta, um filtro de linha avalia uma condição e retorna somente as linhas que a atendem. Isso é comumente utilizado para implementar segurança em nível de linha — por exemplo, restringir usuários a registros de uma região, departamento ou account específicos.
Os filtros de linha são definidos como funções definidas pelo usuário (UDFs) do SQL e também podem incorporar lógica Python ou Scala quando envolvidos em uma UDF do SQL. Você pode aplicar filtros de linha por tabela ou centralmente por meio de políticas ABAC usando tags controladas.
O que são máscaras de coluna?
As máscaras de coluna controlam quais valores os usuários veem em colunas específicas, dependendo de quem são. No momento da consulta, a máscara substitui cada referência a uma coluna pelo resultado de uma função de mascaramento. Isso permite que dados confidenciais, como números de identidade social ou e-mails, sejam editados ou transformados com base na identidade ou função do usuário.
Cada coluna pode ter uma máscara. A máscara é definida como uma UDF SQL e pode, opcionalmente, envolver lógica Python ou Scala, e deve retornar um valor do mesmo tipo que a coluna que está sendo mascarada. As máscaras de coluna também podem usar outras colunas como entradas, por exemplo, para variar o comportamento com base em vários atributos.
Assim como os filtros de linha, as máscaras de coluna podem ser aplicadas por tabela ou gerenciadas centralmente por meio de políticas ABAC. Eles operam no momento da consulta e se integram perfeitamente com o SQL padrão, Notebook e painéis.
Quando se deve utilizar a visualização dinâmica em vez de filtros e máscaras?
A visualização dinâmica, os filtros de linha e as máscaras de coluna permitem aplicar filtros ou transformações lógicas no momento da consulta, mas diferem na forma como são gerenciados, definidos e expostos aos usuários.
Recurso | Aplica-se a | gerenciar utilizando | Impacto da nomenclatura | Melhor usado para... |
---|---|---|---|---|
Visão dinâmica | Exibições | Lógica SQL | Cria um novo nome de objeto | compartilhamento de dados filtrados ou abrangendo várias tabelas |
Filtros de linha | tabelas | ABAC ou tabelas de mapeamento | Nome da tabela inalterado | Controle de acesso em nível de linha vinculado a tags de usuário ou de dados |
Máscaras de coluna | Tabelas/colunas | ABAC ou tabelas de mapeamento | Nome da tabela inalterado | Elaboração de dados confidenciais de colunas com base na identidade |
- Utilize a visualização dinâmica quando necessitar de uma camada somente leitura em uma ou mais tabelas de origem, especialmente para compartilhamento de dados ou aplicação de lógica em várias entradas.
- Use filtros de linha e máscaras de coluna quando quiser aplicar lógica diretamente a uma tabela, sem alterar o nome da tabela ou introduzir novos objetos. Estes podem ser gerenciados utilizando políticas ABAC (recomendado) ou manualmente em tabelas.
Para uma comparação completa, consulte Métodos de controle de acesso comparados.
Como aplicar filtros e máscaras
Você pode implementar filtros de linha e máscaras de coluna de duas maneiras principais:
-
Usando políticas ABAC (Beta): aplique filtros e máscaras centralmente usando tags controladas e políticas reutilizáveis. Essa abordagem se aplica a catálogos e esquemas e reduz a necessidade de configuração tabela por tabela. As políticas ABAC são mais seguras do que as políticas manuais em nível de tabela porque podem ser definidas por administradores de nível superior e não podem ser substituídas pelos proprietários de tabelas, o que ajuda a aplicar controles de acesso centralizados. Eles também têm melhor desempenho em muitos casos, pois a lógica de filtragem e mascaramento nas políticas ABAC é avaliada com mais eficiência do que nas UDFs específicas de tabelas. A Databricks recomenda o uso do ABAC para a maioria dos casos de uso. Para aplicar filtros e máscaras utilizando ABAC, consulte Unity Catalog controle de acesso baseado em atributos (ABAC).
-
Atribuição manual por tabela : aplique filtros e máscaras atribuindo funções diretamente a tabelas e colunas individuais. Esse método pode usar tabelas de mapeamento ou outra lógica personalizada. Permite um controle detalhado e específico para cada tabela, mas é mais difícil de escalar e manter. Para obter mais informações, consulte Aplicar manualmente filtros de linha e máscaras de coluna.
Recomendações de desempenho
Filtros de linha e máscaras de coluna controlam a visibilidade dos dados garantindo que os usuários não possam view o conteúdo dos valores das tabelas base antes das operações de filtragem e mascaramento. Eles apresentam bom desempenho em resposta a consultas em casos de uso comuns. Em aplicações menos comuns, onde o mecanismo de consulta deve escolher entre otimizar o desempenho da consulta e proteger contra vazamento de informações dos valores filtrados/mascarados, ele sempre tomará a decisão segura às custas de algum impacto no desempenho da consulta. Para minimizar esse impacto no desempenho, aplique as seguintes recomendações:
- Use funções de política simples: funções de política com menos expressões geralmente têm melhor desempenho do que expressões mais complexas. Evite usar tabelas de mapeamento e subconsultas de expressão em favor de funções CASE simples.
- Reduza o número de argumentos de função: o Databricks não pode otimizar referências de coluna para a tabela de origem resultantes de argumentos de função de política, mesmo que essas colunas não sejam usadas na consulta. Use funções de política com menos argumentos, pois as consultas dessas tabelas terão melhor desempenho.
- Evite adicionar filtros de linha com muitos conjuntos AND: como cada tabela suporta a adição de no máximo um filtro de linha, uma abordagem comum é combinar várias funções de política desejadas com
AND
. Entretanto, com cada conjunto adicional, aumentam as chances de que os conjuntos incluam componentes mencionados em outras partes desta tabela que podem afetar o desempenho (como tabelas de mapeamento). Use menos orações para melhorar o desempenho. - Use expressões determinísticas que não podem gerar erros em políticas de tabela e consultas dessas tabelas: algumas expressões podem gerar erros se as entradas fornecidas não forem válidas, como a divisão ANSI. Nesses casos, o compilador SQL não deve empurrar operações com essas expressões (como filtros) muito para baixo no plano de consulta para evitar a possibilidade de erros como “divisão por zero”, que revelam informações sobre valores antes de filtrar e/ou mascarar operações. Use expressões determinísticas que nunca geram erros, como
try_divide
. - Execute consultas de teste em sua tabela para avaliar o desempenho: construa consultas realistas que representem a carga de trabalho que você espera para sua tabela com filtros de linha ou máscaras de coluna e meça o desempenho. Faça pequenas modificações nas funções de política e observe seus efeitos até atingir um bom equilíbrio entre desempenho e expressividade da lógica de filtragem e mascaramento.
Para mais práticas recomendadas e exemplos de UDFs, consulte UDFs para práticas recomendadas de políticas ABAC.
Limitações
- As versões Databricks Runtime abaixo de 12.2 LTS não oferecem suporte a filtros de linha ou máscaras de coluna. Esses tempos de execução falham com segurança, o que significa que se você tentar acessar tabelas a partir desses tempos de execução, nenhum dado será retornado.
- O Delta Sharing não funciona com máscaras de segurança ou coluna em nível de linha.
- Não é possível usar o catálogo REST do Iceberg ou as APIs REST do Unity para acessar tabelas com filtros de linha ou máscaras de coluna.
- Você não pode aplicar máscaras de segurança ou de coluna no nível da linha a uma exibição.
- A viagem do tempo não funciona com segurança em nível de linha ou máscaras de coluna.
- Não há suporte para o acesso baseado em caminho a arquivos em tabelas com políticas.
- Não há suporte para políticas de filtro de linha nem máscara de coluna com dependências circulares em relação às políticas originais.
- Clones profundos e superficiais não são suportados em tabelas que têm segurança em nível de linha ou máscaras de coluna.
MERGE
instruções não oferecem suporte a tabelas com políticas de filtro de linha ou máscara de coluna que contenham aninhamento, agregações, janelas, limites ou funções não determinísticas.- As APIs do Delta Lake não são suportadas.
Limitação do modo de acesso dedicado
Não é possível acessar uma tabela com filtros de linha ou máscaras de coluna a partir de um recurso compute acesso dedicado no Databricks Runtime 15.3 ou inferior. Você pode usar o modo de acesso dedicado no Databricks Runtime 15.4 LTS ou acima se seu workspace estiver habilitado para compute serverless . No entanto, somente operações de leitura são suportadas no Databricks Runtime 15.4 a 16.2. Operações de gravação (incluindo INSERT
, UPDATE
e DELETE
) requerem DBR 16.3 ou superior e devem usar padrões suportados, como MERGE INTO
.
Para obter mais informações, consulte Controle de acesso refinado em computededicada.