Partager via


Masquage dynamique des données

S’applique à : la base de données Azure SQL Azure SQL Managed Instance Azure Synapse Analytics (pools SQL dédiés uniquement) base de données SQL dans Fabric

Base de données Azure SQL, les bases de données SQL dans Microsoft Fabric, Azure SQL Managed Instance et Azure Synapse Analytics prennent en charge le masquage dynamique des données (DDM). Le masquage des données dynamiques limite l’exposition des données sensibles en les masquant pour les utilisateurs sans privilège.

Le masquage des données dynamiques empêche tout accès non autorisé aux données sensibles en permettant aux clients d’indiquer la quantité de données sensibles à afficher, avec un impact minimal sur la couche application. Il s’agit d’une fonctionnalité de sécurité basée sur des stratégies qui masque les données sensibles dans le jeu de résultats d’une requête, sur des champs de base de données désignés (les données dans la base de données ne sont pas modifiées).

Par exemple, un représentant du service d’un centre d’appels peut identifier un appelant en confirmant plusieurs caractères de son adresse e-mail, mais l’adresse e-mail complète ne doit pas être dévoilée au représentant du service. Une règle de masquage peut être définie pour masquer l’intégralité de l’adresse e-mail dans le jeu de résultats de toute requête. Autre exemple, un masque de données approprié peut être défini pour protéger les données personnelles, de telle sorte qu'un développeur puisse interroger les environnements de production à des fins de dépannage sans aller à l'encontre des réglementations de conformité.

Principes de base du masquage des données dynamiques

Pour la base de données Azure SQL, vous configurez une stratégie de masquage dynamique des données dans le portail Azure en sélectionnant le volet Dynamic Data Masking sous Sécurité dans le volet de configuration de votre base de données SQL.

Cette fonctionnalité ne peut pas être définie à l’aide du portail Azure pour SQL Managed Instance ou de la base de données SQL dans Fabric. Utilisez plutôt T-SQL, comme dans l’exemple Dynamic Data Masking dans cet article. Pour plus d’informations, consultez Dynamic Data Masking.

Stratégie de masquage des données dynamiques

  • Utilisateurs SQL exclus du masquage : un ensemble d’utilisateurs SQL, qui peut inclure des identités Microsoft Entra ID (anciennement Azure Active Directory), qui obtiennent des données non masquées dans les résultats de requête SQL. Les utilisateurs disposant de droits d’administration comme Administrateur serveur, Administrateur Microsoft Entra ou propriétaire de rôle db_owner peuvent afficher les données d’origine sans masque. (Remarque : cela s’applique également au rôle sysadmin dans SQL Server)
  • Règles de masquage : ensemble de règles qui définissent les champs désignés à masquer et la fonction de masquage à utiliser. Les champs désignés peuvent être définis avec un nom de schéma de base de données, un nom de table et un nom de colonne.
  • Fonctions de masquage : ensemble de méthodes qui contrôlent l’exposition des données dans différents scénarios.
Fonction de masquage Logique de masquage
Par défaut Masquage complet en fonction des types de données des champs désignés

* Utilisez XXXX (ou moins) si la taille du champ est inférieure à 4 caractères pour les types de données de chaîne (nchar, ntext, nvarchar).
* Utilisez la valeur zéro pour les types de données numériques (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real).
* Utilisez 1900-01-01 pour les types de données de date et heure (date, datetime2, datetime, datetimeoffset, smalldatetime, time).
* Pour sql_variant, la valeur par défaut du type actuel est utilisée.
* Pour XML, le document <masked /> est utilisé.
* Utilisez une valeur vide pour les types de données spéciaux (types timestamp, table, HierarchyID, uniqueidentifier, binary, image, varbinary et spatiaux).
Carte de crédit Méthode de masquage qui affiche les quatre derniers chiffres des champs de masquage désignés et ajoute une chaîne constante comme préfixe sous la forme d’une carte de crédit.

XXXX-XXXX-XXXX-1234
E-mail Méthode de masquage qui affiche la première lettre et remplace le domaine par XXX.com avec en préfixe une chaîne constante sous la forme d’une adresse de messagerie.

aXX@XXXX.com
Nombre aléatoire Méthode de masquage qui génère un nombre aléatoire selon les limites sélectionnées et les types de données réels. Si les limites désignées sont égales, la fonction de masquage est un nombre constant.

Capture d’écran montrant la méthode de masquage pour générer un nombre aléatoire.
Texte personnalisé Méthode de masquage qui affiche le premier et le dernier caractères et ajoute une chaîne de remplissage personnalisée entre les deux. Si la chaîne d’origine est plus courte que le préfixe et le suffixe affichés, seule la chaîne de remplissage est utilisée.

prefix[padding]suffix
Capture d’écran du volet de navigation.

Le moteur de recommandations DDM signale certains champs de votre base de données en tant que champs potentiellement sensibles, qui peuvent être de bons candidats pour le masquage. Dans le volet Masquage des données dynamiques du portail, les colonnes recommandées pour votre base de données sont affichées. Sélectionnez Ajouter un masque pour une ou plusieurs colonnes, puis sélectionnez la fonction de masquage appropriée et Enregistrer pour appliquer un masque à ces champs.

Gérer le masquage dynamique des données à l’aide de T-SQL

Configurer le masquage des données dynamiques pour votre base de données à l’aide des cmdlets PowerShell

Stratégies de masquage des données

Règles de masquage de données

Configurer le masquage dynamique des données pour votre base de données à l’aide de l’API REST

Vous pouvez utiliser l’API REST pour gérer par programme les règles et stratégies de masquage des données. L’API REST publiée prend en charge les opérations suivantes :

Stratégies de masquage des données

  • Créer ou mettre à jour : Crée ou met à jour une stratégie de masquage des données de la base de données.
  • Obtenir : Fourni une stratégie de masquage des données de la base de données.

Règles de masquage de données

Autorisations

Voici les rôles intégrés permettant de configurer le masquage des données dynamique :

Les actions requises pour utiliser le masquage dynamique des données sont les suivantes :

Lecture/Écriture :

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/*

Lecture :

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/read

Écriture :

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/write

Pour en savoir plus sur les autorisations lors de l’utilisation du masquage dynamique des données avec la commande T-SQL, consultez Autorisations.

Exemple d’autorisation granulaire

Empêchez l’accès non autorisé aux données sensibles et contrôlez-le en le masquant à un utilisateur non autorisé à différents niveaux de la base de données. Vous pouvez accorder ou révoquer l’autorisation UNMASK au niveau de la base de données, du schéma, du tableau ou de la colonne pour un utilisateur ou un rôle de base de données. Combinées à l’authentification Microsoft Entra, les autorisations UNMASK peuvent être gérées pour les utilisateurs, les groupes et les applications gérés dans votre environnement Azure. L’utilisation de l’autorisation UNMASK permet de contrôler et de limiter l’accès non autorisé aux données stockées dans la base de données et d’améliorer la gestion de la sécurité des données.

  1. Créer un schéma pour contenir des tables utilisateur :

    CREATE SCHEMA Data;
    GO
    
  2. Créer une table avec des colonnes masquées :

    CREATE TABLE Data.Membership (
        MemberID INT IDENTITY(1, 1) NOT NULL,
        FirstName VARCHAR(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
        LastName VARCHAR(100) NOT NULL,
        Phone VARCHAR(12) MASKED WITH (FUNCTION = 'default()') NULL,
        Email VARCHAR(100) MASKED WITH (FUNCTION = 'email()') NOT NULL,
        DiscountCode SMALLINT MASKED WITH (FUNCTION = 'random(1, 100)') NULL,
        BirthDay DATETIME MASKED WITH (FUNCTION = 'default()') NULL
    );
    
  3. Insérer des exemples de données :

    INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode, BirthDay)
    VALUES
    ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10, '1985-01-25 03:25:05'),
    ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5, '1990-05-14 11:30:00'),
    ('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50, '2004-02-29 14:20:10'),
    ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40, '1990-03-01 06:00:00');
    
  4. Créer un schéma pour contenir des tables de service :

    CREATE SCHEMA Service;
    GO
    
  5. Créer une table de service avec des colonnes masquées :

    CREATE TABLE Service.Feedback (
        MemberID INT IDENTITY(1, 1) NOT NULL,
        Feedback VARCHAR(100) MASKED WITH (FUNCTION = 'default()') NULL,
        Rating INT MASKED WITH (FUNCTION = 'default()'),
        Received_On DATETIME
    );
    
  6. Insérer des exemples de données :

    INSERT INTO Service.Feedback (Feedback, Rating, Received_On)
    VALUES
        ('Good', 4, '2022-01-25 11:25:05'),
        ('Excellent', 5, '2021-12-22 08:10:07'),
        ('Average', 3, '2021-09-15 09:00:00');
    
  7. Créer différents utilisateurs dans la base de données :

    CREATE USER ServiceAttendant WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceLead WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceManager WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceHead WITHOUT LOGIN;
    GO
    
  8. Accorder des autorisations de lecture aux utilisateurs de la base de données :

    ALTER ROLE db_datareader ADD MEMBER ServiceAttendant;
    
    ALTER ROLE db_datareader ADD MEMBER ServiceLead;
    
    ALTER ROLE db_datareader ADD MEMBER ServiceManager;
    
    ALTER ROLE db_datareader ADD MEMBER ServiceHead;
    
  9. Accorder différentes autorisations UNMASK aux utilisateurs :

    --Grant column level UNMASK permission to ServiceAttendant
    GRANT UNMASK ON Data.Membership(FirstName) TO ServiceAttendant;
    
    -- Grant table level UNMASK permission to ServiceLead
    GRANT UNMASK ON Data.Membership TO ServiceLead;
    
    -- Grant schema level UNMASK permission to ServiceManager
    GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
    GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
    
    --Grant database level UNMASK permission to ServiceHead;
    GRANT UNMASK TO ServiceHead;
    
  10. Interroger les données dans le contexte de l’utilisateur ServiceAttendant :

    EXECUTE AS USER = 'ServiceAttendant';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  11. Interroger les données dans le contexte de l’utilisateur ServiceLead :

    EXECUTE AS USER = 'ServiceLead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  12. Interroger les données dans le contexte de l’utilisateur ServiceManager :

    EXECUTE AS USER = 'ServiceManager';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  13. Interroger les données dans le contexte de l’utilisateur ServiceHead

    EXECUTE AS USER = 'ServiceHead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  14. Pour révoquer les autorisations UNMASK, utilisez les instructions T-SQL suivantes :

    REVOKE UNMASK ON Data.Membership(FirstName) FROM ServiceAttendant;
    
    REVOKE UNMASK ON Data.Membership FROM ServiceLead;
    
    REVOKE UNMASK ON SCHEMA::Data FROM ServiceManager;
    
    REVOKE UNMASK ON SCHEMA::Service FROM ServiceManager;
    
    REVOKE UNMASK FROM ServiceHead;