Aller au contenu principal

Créez une vue dynamique

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

  • Sécurité au niveau des colonnes ou des lignes.
  • masquage de 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.

  • session_user(): Retourne l'adresse e-mail de l'utilisateur actuel.
  • is_account_group_member(): Renvoie TRUE si l'utilisateur actuel est membre d'un groupe spécifique au niveau du compte. 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 du workspace. Cette fonction est fournie pour la compatibilité avec le Hive metastore existant. Évitez de l'utiliser avec les vues par rapport aux données Unity Catalog, car il n'évalue pas l'appartenance à un groupe au niveau du compte.

Databricks vous 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 comment créer des vues dynamiques dans Unity Catalog.

Avant de commencer

Pour créer ou lire des vues dynamiques, les exigences sont les mêmes que celles des vues standard, à l'exception des exigences de compute. Vous devez utiliser l'une des ressources de compute suivantes :

  • Un SQL Warehouse.
  • Compute avec le mode d’accès standard (anciennement mode d’accès partagé).
  • Compute avec le mode d'accès dédié (anciennement : mode d'accès utilisateur unique) sur Databricks Runtime 15.4 LTS ou versions ultérieures.

Vous ne pouvez pas lire les vues dynamiques en utilisant un compute dédié sur Databricks Runtime 15.3 ou version inférieure.

Pour tirer parti du filtrage des données fourni dans Databricks Runtime 15.4 LTS et les versions supérieures, vous devez également vérifier que votre Workspace est activé pour le compute serverless , car la fonctionnalité de filtrage des données qui prend en charge les vues dynamiques s’exécute sur le compute serverless. Vous pourriez donc être facturé pour des ressources de compute serverless lorsque vous utilisez du compute dédié pour lire des vues dynamiques. Voir les contrôles d’accès détaillés sur le compute dédié.

Autorisations au niveau des colonnes

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 de la table sales_raw. Pendant l'analyse de query, Apache Spark remplace l'instruction CASE par la chaîne de caractères littérale REDACTED ou le contenu réel de la colonne d'adresse e-mail. Les autres colonnes sont renvoyées normalement. Cette stratégie n'a aucun impact négatif sur les performances de la query.

SQL
-- 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 les autorisations jusqu'au niveau de la ligne ou du champ. Dans l'exemple suivant, seuls les membres du groupe managers peuvent voir les montants de transaction lorsqu'ils dépassent 1 000 000 $. Les résultats correspondants sont filtrés pour les autres utilisateurs.

SQL
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 un masquage de données avancé en utilisant des expressions SQL et des expressions régulières plus complexes. Dans l'exemple suivant, tous les utilisateurs peuvent analyser les domaines d'e-mail, mais seuls les membres du groupe auditors peuvent afficher l'adresse e-mail complète d'un utilisateur.

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