Partager via


Sécurité au niveau ligne dans OneLake (préversion)

La sécurité au niveau des lignes (SNL) est une fonctionnalité de la sécurité OneLake (préversion) qui permet de définir des restrictions de données au niveau des lignes pour les données tabulaires stockées dans OneLake. Les utilisateurs peuvent définir des rôles dans OneLake qui contiennent des règles de filtrage des lignes de données pour les membres de ce rôle. Lorsqu’un membre d’un rôle SNL interroge ces données, les règles SNL sont évaluées et seules les lignes autorisées sont retournées.

Conditions préalables

Appliquer la sécurité au niveau des lignes

La sécurité SNL OneLake est appliquée de deux façons :

  • Tables filtrées dans les moteurs Fabric : les requêtes sur la liste des moteurs Fabric pris en charge, comme les notebooks Spark, entraînent l’affichage des seules lignes que l’utilisateur est autorisé à voir conformément aux règles SNL.
  • Accès bloqué aux tables : les tables avec des règles SNL appliquées ne peuvent pas être lues en dehors des moteurs Fabric pris en charge.

Pour les tables filtrées, les comportements suivants s’appliquent :

  • Les règles SNL ne limitent pas l’accès aux utilisateurs dans les rôles Administrateur, Membre et Contributeur.
  • Si la règle SNL a une incompatibilité avec la table sur laquelle elle est définie, la requête échoue et aucune ligne n’est retournée. Par exemple, si la règle SNL fait référence à une colonne qui ne fait pas partie de la table.
  • Les requêtes des tables SNL échouent avec une erreur si un utilisateur fait partie de deux rôles différents et que l’un des rôles a une sécurité au niveau des colonnes (CLS).
  • Les règles SNL ne peuvent être appliquées que pour les objets qui sont des tables Parquet Delta.
    • Les règles SNL appliquées aux objets de table non Delta bloquent plutôt l’accès à l’ensemble de la table pour les membres du rôle.
  • L’accès à une table peut être bloqué si l’instruction SNL contient des erreurs de syntaxe qui empêchent son évaluation.

Définir des règles de sécurité au niveau des lignes

Vous pouvez définir des règles de sécurité au niveau des lignes dans le cadre de n’importe quel rôle de sécurité OneLake qui accorde l’accès aux données de table au format Parquet Delta. Les lignes sont un concept qui concerne uniquement les données tabulaires. Par conséquent, les définitions SNL ne sont pas autorisées pour les dossiers non-tables ou les données non structurées.

Les règles SNL utilisent la syntaxe SQL pour spécifier les lignes qu’un utilisateur peut voir. Cette syntaxe prend la forme d’une instruction SQL SELECT avec les règles SNL définies dans la clause WHERE. Les règles SNL prennent uniquement en charge un sous-ensemble du langage SQL tel que défini dans les règles de syntaxe. Les requêtes avec une syntaxe SNL non valide ou une syntaxe SNL qui ne correspondent pas à la table sous-jacente n’entraînent pas d’affichage de lignes aux utilisateurs ou d’erreurs de requête dans le point de terminaison d’analyse SQL.

En guise de meilleure pratique, évitez d’utiliser des expressions RLS vagues ou trop complexes. Les expressions fortement typées avec des recherches d’entiers ou de chaînes avec « = » seront les plus sécurisées et faciles à comprendre.

Procédez comme suit pour définir des règles SNL :

  1. Accédez à votre Lakehouse et sélectionnez Gérer la sécurité OneLake (préversion).

  2. Sélectionnez un rôle existant pour lequel vous souhaitez définir la sécurité des tables ou des dossiers, ou sélectionnez Nouveau pour créer un rôle.

  3. Sur la page des détails du rôle, sélectionnez plus options (...) en regard du tableau pour lequel vous souhaitez définir SNL, puis sélectionnez Sécurité des lignes (préversion).

    Capture d’écran montrant la sélection de « Sécurité des lignes » pour modifier les autorisations sur une table.

  4. Tapez l’instruction SQL pour définir les lignes que vous souhaitez que les utilisateurs voient dans l’éditeur de code. Utilisez la section Règles de syntaxe pour obtenir des conseils.

  5. Sélectionnez Enregistrer pour confirmer les règles de sécurité de ligne.

Activer la sécurité OneLake pour le point de terminaison d’analytique SQL

Avant de pouvoir utiliser la sécurité OneLake avec le point de terminaison SQL analytique, vous devez activer le mode d’identité de l'utilisateur. Les points de terminaison d’analytique SQL nouvellement créés sont par défaut en mode d’identité de l’utilisateur. Ces étapes doivent donc être suivies pour les points de terminaison d’analytique SQL existants.

Remarque

Le passage au mode d’identité de l’utilisateur doit être effectué une seule fois par point de terminaison d’analytique SQL. Les points de terminaison qui ne sont pas basculés vers le mode d’identité de l’utilisateur continueront d’utiliser une identité déléguée pour évaluer les autorisations.

  1. Accédez au point de terminaison d’analytique SQL.

  2. Dans l'interface SQL Analytics, sélectionnez l'onglet Sécurité dans la barre d'outils.

  3. Sélectionnez l’identité de l’utilisateur en mode d’accès OneLake.

    Capture d’écran montrant la sélection de « identité utilisateur » pour activer la sécurité OneLake pour le point de terminaison d’analytique SQL.

  4. Dans l’invite, sélectionnez Oui, utilisez l’identitéde l’utilisateur.

    Capture d’écran montrant la demande qui doit être acceptée pour activer la sécurité OneLake permettant l’accès en lecture aux tables.

Le point de terminaison d’analytique SQL est maintenant prêt à être utilisé avec la sécurité OneLake.

Règles de la syntaxe

Toutes les règles de sécurité au niveau des lignes prennent la forme suivante :

SELECT * FROM {schema_name}.{table_name} WHERE {column_level_boolean_1}{column_level_boolean_2}...{column_level_boolean_N}

Par exemple:

SELECT * FROM Sales WHERE Amount>'50000' AND State='CA'

Le nombre maximal de caractères dans une règle de sécurité au niveau des lignes est de 1 000.

Espace réservé Descriptif
{schema_name} Nom du schéma où se trouve {table_name}. Si l’artefact prend en charge les schémas, {schema_name} est requis.
{table_name} Nom de la table à laquelle le prédicat SNL est appliqué. Cette valeur doit être une correspondance exacte avec le nom de la table, ou la valeur SNL n’affiche aucune ligne.
{column_level_boolean} Instruction booléenne contenant les composants suivants :

* Nom de colonne : nom d’une colonne dans {table_name} tel que spécifié dans le schéma du journal Delta. Les noms de colonnes peuvent être mis en forme comme {column_name} ou {table_name}. {column_name}.
* Opérateur : l’un des opérateurs pris en charge qui évalue le nom et la valeur de la colonne en valeur booléenne.
* Valeur : valeur statique ou ensemble de valeurs à évaluer.

Vous pouvez avoir une ou plusieurs instructions booléennes séparées par AND ou OR.

Opérateurs pris en charge

Les règles de sécurité au niveau des lignes prennent en charge la liste suivante d’opérateurs et de mots clés :

Opérateur Descriptif
= (est égal à) Évalue la valeur true si les deux valeurs sont le même type de données et les correspondances exactes.
<> (différent de) Prend la valeur true si les deux valeurs ne sont pas du même type de données et qu’elles ne correspondent pas exactement.
> (supérieur à) Prend la valeur true si la valeur de colonne est supérieure à la valeur d’évaluation. Pour les valeurs de chaîne, cet opérateur utilise une comparaison de bits pour déterminer si une chaîne est supérieure à l’autre.
>= (supérieur ou égal à) Prend la valeur true si la valeur de colonne est supérieure ou égale à la valeur d’évaluation. Pour les valeurs de chaîne, cet opérateur utilise une comparaison de bits pour déterminer si une chaîne est supérieure ou égale à l’autre.
< (inférieur à) Prend la valeur true si la valeur de colonne est inférieure à la valeur d’évaluation. Pour les valeurs de chaîne, cet opérateur utilise une comparaison de bits pour déterminer si une chaîne est inférieure à l’autre.
<= (inférieur ou égal à) Prend la valeur true si la valeur de colonne est inférieure ou égale à la valeur d’évaluation. Pour les valeurs de chaîne, cet opérateur utilise une comparaison de bits pour déterminer si une chaîne est inférieure ou égale à l’autre.
DANS Prend la valeur true si l’une des valeurs d’évaluation est le même type de données et correspond exactement à la valeur de colonne.
NON Prend la valeur true si l’une des valeurs d’évaluation ne correspond pas au même type de données ni à une correspondance exacte de la valeur de colonne.
ET Combine l’instruction précédente et l’instruction suivante à l’aide d’une opération AND booléenne. Les deux instructions doivent être vraies pour que le prédicat entier soit vrai.
OU Combine l’instruction précédente et l’instruction suivante à l’aide d’une opération OR booléenne. L’une des instructions doit être vraie pour que l’ensemble du prédicat soit vrai.
VRAI Expression booléenne pour true.
FAUX Expression booléenne pour false.
VIDE Type de données vide, qui peut être utilisé avec l’opérateur IS. Par exemple : row IS BLANK.
ZÉRO Type de données nulle, qui peut être utilisé avec l’opérateur IS. Par exemple : row IS NULL.

Combiner la sécurité au niveau des lignes et des colonnes

La sécurité au niveau des lignes et des colonnes peut être utilisée ensemble pour restreindre l’accès utilisateur à une table. Toutefois, les deux stratégies doivent être appliquées à l’aide d’un seul rôle de sécurité OneLake. Dans ce scénario, l’accès aux données est limité en fonction des règles définies dans le même rôle.

La sécurité OneLake ne prend pas en charge la combinaison de deux rôles ou plus lorsque l’un contient des règles RLS et un autre des règles CLS. Les utilisateurs qui tentent d’accéder aux tables qui font partie d’une combinaison de rôles non prise en charge reçoivent des erreurs de requête.