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(): Retorna TRUE 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(): Retorna TRUE 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