Partager via


Créer une vue dynamique

Dans Unity Catalog, vous pouvez utiliser des vues dynamiques pour configurer un contrôle d’accès affiné, notamment :

  • Sécurité au niveau des colonnes ou des lignes
  • Masquage des données

Unity Catalog introduit les fonctions suivantes, qui vous permettent de limiter de manière dynamique les utilisateurs qui peuvent accéder à une ligne, une colonne ou un enregistrement dans une vue :

  • current_user() : renvoie l’adresse e-mail de l’utilisateur actuel.
  • is_account_group_member() : renvoie TRUE si l’utilisateur actuel est membre d’un groupe de niveau compte spécifique. Recommandé pour une utilisation dans les vues dynamiques par rapport aux données Unity Catalog.
  • is_member() : renvoie TRUE si l’utilisateur actuel est membre d’un groupe spécifique au niveau de l’espace de travail. Cette fonction est fournie à des fins de compatibilité avec le metastore Hive existant. Évitez de l’utiliser avec des vues sur des données Unity Catalog, car elle n’évalue pas l’appartenance au groupe de niveau compte.

Azure Databricks recommande de ne pas accorder aux utilisateurs la possibilité de lire les tables et les vues référencées dans la vue.

Les exemples suivants illustrent la création de vues dynamiques dans Unity Catalog.

Avant de commencer

Pour créer ou lire des vues dynamiques, les exigences sont identiques à celles des vues standard, à l’exception des exigences de calcul. Vous devez utiliser l’une des ressources de calcul suivantes :

  • Un entrepôt SQL.

  • Calcul avec mode d'accès partagé.

  • Calcul avec mode d’accès utilisateur unique sur Databricks Runtime 15.4 LTS ou version ultérieure.

    Vous ne pouvez pas lire les vues dynamiques à l’aide du calcul mono-utilisateur sur Databricks Runtime 15.3 ou inférieur.

    Pour tirer parti du filtrage des données fourni dans Databricks Runtime 15.4 LTS et les versions ultérieures, vous devez également vérifier que votre espace de travail permet le calcul serverless, car la fonctionnalité de filtrage des données qui prend en charge les vues dynamiques s’exécute sur le calcul serverless. Vous pouvez donc être facturé pour les ressources de calcul serverless lorsque vous utilisez le calcul d’un seul utilisateur pour lire des vues dynamiques. Consultez le contrôle d’accès affiné sur le calcul d’un seul utilisateur.

Autorisations au niveau de la colonne

Avec une vue dynamique, vous pouvez limiter les colonnes auxquelles un utilisateur ou un groupe spécifique peut accéder. Dans l’exemple suivant, seuls les membres du groupe auditors peuvent accéder aux adresses e-mail à partir de la table sales_raw. Au cours de l’analyse des requêtes, Apache Spark remplace l’instruction CASE par la chaîne littérale REDACTED ou le contenu réel de la colonne d’adresses e-mail. Les autres colonnes sont renvoyées normalement. Cette stratégie n’a pas d’impact négatif sur les performances des requêtes.

-- 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

Autorisations au niveau des lignes

Avec une vue dynamique, vous pouvez spécifier des autorisations jusqu’au niveau de la ligne ou du champ. Dans l’exemple suivant, seuls les membres du groupe managers peuvent afficher les montants des transactions lorsqu’ils dépassent 1 million de dollars. Les résultats correspondants sont filtrés et non visibles par les autres utilisateurs.

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;

Masquage de données

Étant donné que les vues dans Unity Catalog utilisent Spark SQL, vous pouvez implémenter le masquage des données avancé à l’aide d’expressions SQL et d’expressions régulières plus complexes. Dans l’exemple suivant, tous les utilisateurs peuvent analyser des domaines de courrier, mais seuls les membres du groupe auditors peuvent afficher l’adresse e-mail entière d’un utilisateur.

-- 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