Partager via


Masquage dynamique des données

S’applique à :la base de données Azure SQLAzure SQL Managed InstanceAzure 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 qui masque l’intégralité de l’adresse e-mail dans le jeu de résultats de n’importe quelle 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 Transact-SQL (T-SQL), comme dans l’exemple d’autorisation granulaire de cet article. Pour plus d’informations, consultez Masquage des données dynamiques.

Stratégie de masquage des données dynamiques

  • Utilisateurs SQL exclus du masquage : Ensemble d’utilisateurs SQL, qui peuvent inclure des identités à partir de l’ID Microsoft Entra, qui obtiennent des données non masquées dans les résultats de la 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 une valeur zéro pour les types de données numériques (bigint, bit, décimal, int, money, numeric, smallint, smallmoney, tinyint, float, real).
    Utiliser 1900-01-01 pour les types de données date/heure (date, datetime2, datetime, datetimeoffset, smalldatetime, heure).
    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 (timestamp, table, HierarchyID, uniqueidentifier, binary, image, varbinary et types 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.
    Datetime Active le masquage granulaire pour les colonnes date/heure, à savoir datetime, datetime2, date, heure, datetimeoffset et smalldatetime. Vous pouvez masquer des composants spécifiques tels que l’année (), le mois (datetime("Y")), le jour (), l’heure (datetime("M")datetime("D")), la minute (datetime("h")) ou la seconde (datetime("m")).datetime("s") Vous appliquez cette fonction à l’aide de T-SQL.

    Par exemple:

    - Année du masque : ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")').
    - Mois de masquage : ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")').
    - Minute de masque : ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")').

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.
  • Get : Fournit une stratégie de masquage des données de la base de données.

Règles de masquage de données

Autorisations

Vous pouvez configurer le masquage des données dynamiques avec les rôles intégrés suivants :

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

Écrire :

  • 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 UNMASK des autorisations au niveau de la base de données, au niveau du schéma, au niveau de la table ou au niveau de la colonne pour n’importe quel utilisateur ou rôle de base de données. Combinées à l’authentification Microsoft Entra, UNMASK les autorisations peuvent être gérées pour les utilisateurs, les groupes et les applications gérés dans votre environnement Azure. L’autorisation UNMASK fournit un moyen précis 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. Accordez différentes UNMASK autorisations aux utilisateurs :

    • Accordez l’autorisation au niveau UNMASK de la colonne pour ServiceAttendant:

      GRANT UNMASK ON Data.Membership (FirstName) TO ServiceAttendant;
      
    • Accordez l’autorisation au niveau de la table UNMASK à ServiceLead :

      GRANT UNMASK ON Data.Membership TO ServiceLead;
      
    • Accordez l’autorisation de niveau de schéma UNMASK à ServiceManager :

      GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
      GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
      
    • Accorder l’autorisation au niveau de la base de données UNMASK à 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 UNMASK des autorisations, 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;