Criar uma exibição dinâmica
Em Unity Catalog, o senhor pode usar a visualização dinâmica para configurar o controle de acesso refinado, inclusive:
Segurança no nível de colunas ou linhas.
mascaramento de dados.
Unity Catalog Apresenta as seguintes funções, que permitem limitar dinamicamente quais usuários podem acessar uma linha, coluna ou registro em view:
current_user()
: Retorna o endereço email do usuário atual.is_account_group_member()
: RetornaTRUE
se o usuário atual for membro de um grupo específico de nível account. Recomendado para uso em visualização dinâmica em relação aos dados do site Unity Catalog.is_member()
: RetornaTRUE
se o usuário atual for membro de um grupo específico de nível workspace. Essa função é fornecida para compatibilidade com o site Hive metastore. Evite usá-lo com a visualização dos dados do site Unity Catalog, pois ele não avalia a associação de grupo no nível account.
Databricks Recomenda que o senhor não conceda aos usuários a capacidade de ler as tabelas e exibições referenciadas no site view.
Os exemplos a seguir ilustram como criar uma exibição dinâmica em Unity Catalog.
Antes de começar
Para criar ou ler a exibição dinâmica, os requisitos são os mesmos da exibição padrão, com exceção dos requisitos do site compute. O senhor deve usar um dos seguintes compute recurso:
A SQL warehouse.
compute com modo de acesso compartilhado.
computar com modo de acesso de usuário único em Databricks Runtime 15.4 LTS ou acima.
Não é possível ler a exibição dinâmica usando um único usuário compute em Databricks Runtime 15.3 ou abaixo.
Para aproveitar a filtragem de dados fornecida em Databricks Runtime 15.4 LTS e acima, o senhor também deve verificar se o seu workspace está habilitado para serverless compute , porque a funcionalidade de filtragem de dados que suporta a execução de visualização dinâmica em serverless compute. Portanto, o senhor poderá ser cobrado pelo serverless compute recurso quando usar o usuário único compute para ler a exibição dinâmica. Consulte Controle de acesso refinado em computação de usuário único.
Permissões em nível de coluna
Com um view dinâmico, é possível limitar as colunas que um usuário ou grupo específico pode acessar. No exemplo a seguir, somente os membros do grupo auditors
podem acessar os endereços email da tabela sales_raw
. Durante a análise da consulta, o site Apache Spark substitui a instrução CASE
pelas strings literais REDACTED
ou pelo conteúdo real da coluna de endereço email. 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 em nível de linha
Com um view dinâmico, o senhor pode especificar permissões até o nível da linha ou do campo. No exemplo a seguir, somente os membros do grupo managers
podem acessar view os valores das transações quando eles 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;
mascaramento de dados
Como a visualização em Unity Catalog usa Spark SQL, o senhor 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 os email domínios , mas somente os membros do auditors
grupo podem analisar view todo o email endereço 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