Partilhar via


Criar uma vista dinâmica

No Unity Catalog, você pode usar exibições dinâmicas para configurar o controle de acesso refinado, incluindo:

  • Segurança ao nível de colunas ou linhas.
  • Mascaramento de dados.

Nota

O controle de acesso refinado usando exibições dinâmicas não está disponível em clusters com o modo de acesso de usuário único.

O Unity Catalog apresenta as seguintes funções, que permitem limitar dinamicamente quais usuários podem acessar uma linha, coluna ou registro em uma exibição:

  • current_user(): Retorna o endereço de e-mail do usuário atual.
  • is_account_group_member(): Retorna TRUE se o usuário atual for membro de um grupo específico no nível da conta. Recomendado para uso em exibições dinâmicas em relação aos dados do Catálogo Unity.
  • is_member(): Retorna TRUE se o usuário atual for membro de um grupo específico no nível do espaço de trabalho. Esta função é fornecida para compatibilidade com o metastore Hive existente. Evite usá-lo com visualizações em relação aos dados do Catálogo Unity, porque ele não avalia a associação ao grupo no nível da conta.

O Azure Databricks recomenda que você não conceda aos usuários a capacidade de ler as tabelas e exibições referenciadas no modo de exibição.

Os exemplos a seguir ilustram como criar exibições dinâmicas no Unity Catalog.

Permissões no nível da coluna

Com uma exibição dinâmica, você pode limitar as colunas que um usuário ou grupo específico pode acessar. No exemplo a seguir, somente os membros do auditors grupo podem acessar endereços de e-mail da sales_raw tabela. Durante a análise da consulta, o Apache Spark substitui a CASE instrução pela cadeia de caracteres REDACTED literal ou pelo conteúdo real da coluna de endereço de e-mail. Outras colunas são retornadas normalmente. Essa estratégia não tem impacto negativo no desempenho da consulta.

-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE WHEN
    is_account_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

Permissões de nível de linha

Com uma vista dinâmica, pode especificar permissões até ao nível da linha ou do campo. No exemplo a seguir, somente os membros do grupo podem visualizar os managers valores das transações quando elas excederem US$ 1.000.000. Os resultados correspondentes são filtrados para outros usuários.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_account_group_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

Máscara de dados

Como as exibições no Unity Catalog usam o Spark SQL, você pode implementar o mascaramento avançado de dados usando expressões SQL e expressões regulares mais complexas. No exemplo a seguir, todos os usuários podem analisar domínios de email, mas apenas os membros do grupo podem exibir todo o auditors endereço de e-mail de um usuário.

-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  region,
  CASE
    WHEN is_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw