Compartilhar via


Criar uma exibição dinâmica

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

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

Observação

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

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

  • current_user(): retorna o endereço de email do usuário atual.
  • is_account_group_member(): retorna TRUE se o usuário atual é membro de um grupo específico de nível de conta. Recomendado para uso em exibições dinâmicas nos dados do Catálogo do Unity.
  • is_member(): retorna TRUE se o usuário atual é membro de um grupo específico de nível de workspace. Essa função é fornecida para compatibilidade com o metastore do Hive existente. Evite usá-la com exibições nos dados do Catálogo do Unity, pois ela não avalia a associação ao grupo de nível de conta.

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

Os exemplos a seguir ilustram como criar exibições dinâmicas no Catálogo do Unity.

Permissões de nível de compartilhamento

Com uma exibição dinâmica, você pode limitar as colunas que um usuário ou um grupo específico pode acessar. No exemplo a seguir, somente os membros do grupo auditors podem acessar os endereços de email da tabela sales_raw. Durante a análise de consulta, o Apache Spark substitui a instrução CASE pela cadeia de caracteres literal REDACTED ou pelo conteúdo real da coluna de endereços de email. Outras colunas são retornadas normalmente. Essa estratégia não tem impacto negativo sobre o 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 exibição dinâmica, você pode especificar permissões até o nível de linha ou de campo. No exemplo a seguir, somente os membros do grupo managers podem ver os valores de transações quando excederem US$ 1.000.000. Os resultados correspondentes são excluídos 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;

Mascaramento de dados

Como as exibições no Catálogo do Unity usam o Spark SQL, você pode implementar o mascaramento de dados avançado usando expressões SQL mais complexas e expressões regulares. No exemplo a seguir, todos os usuários podem analisar domínios de email, mas somente os membros do grupo auditors podem ver o endereço de email completo 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