Partilhar via


Criar uma vista dinâmica

No Unity Catalog, você pode usar o views dinâmico para configurar o controle de acesso refinado, incluindo:

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

O Unity Catalog apresenta as seguintes funções, que permitem limit dinamicamente quais usuários podem acessar uma linha, columnou gravar 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 dinâmico em views com dados de união Catalog.
  • 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 views em relação aos dados do Unity Catalog, porque ele não avalia a associação ao grupo no nível da conta.

O Azure Databricks recomenda que você não grant aos usuários a capacidade de ler os tables e views referenciados no modo de exibição.

Os exemplos a seguir ilustram como criar views dinâmicos no Unity Catalog.

Antes de começar

Para criar ou ler viewsdinâmicos, os requisitos são os mesmos que para viewspadrão, exceto para requisitos de computação. Você deve usar um dos seguintes recursos de computação:

  • Um armazém SQL.

  • Calcule com o modo de acesso compartilhado.

  • Calcule com o modo de acesso de usuário único no Databricks Runtime 15.4 LTS ou superior.

    Não é possível ler views dinâmico usando computação de utilizador único no Databricks Runtime 15.3 ou inferior.

    Para aproveitar a filtragem de dados fornecida no Databricks Runtime 15.4 LTS e superior, você também deve verificar se seu espaço de trabalho está habilitado para computação sem servidor, porque a funcionalidade de filtragem de dados que suporta views dinâmico é executada em computação sem servidor. Portanto, você pode ser cobrado por recursos de computação sem servidor quando usa computação de usuário único para ler viewsdinâmicos . Consulte Controle de acesso refinado na computação de um único usuário.

Permissões de nível Column

Com uma visualização dinâmica, pode-se limit o columns que um usuário ou grupo específico pode acessar. No exemplo a seguir, somente os membros do grupo auditors podem acessar endereços de email do sales_rawtable. Durante a análise da consulta, o Apache Spark substitui a instrução CASE pela string literal REDACTED ou pelo conteúdo real do endereço de e-mail column. Outros columns são devolvidos 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 views 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