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()
: RetornaTRUE
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()
: RetornaTRUE
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_raw
table. 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