Masquage dynamique des données
S’applique à : Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics (pools SQL dédiés uniquement)
Azure SQL Database, 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 définir une stratégie de masquage de données dynamiques sur le portail Azure, sélectionnez le panneau Dynamic Data Masking sous Sécurité dans votre volet de configuration SQL Database. Cette fonctionnalité ne peut pas être définie via le portail pour SQL Managed Instance. 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 |
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. |
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 |
Champs à masquer recommandés
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
- Pour créer un masquage des données dynamique, consultez Création d’un masquage Dynamic Data.
- Pour ajouter ou modifier un masque sur une colonne existante, consultez Ajout ou modification d’un masque sur une colonne existante.
- Pour accorder des autorisations d’affichage des données non masquées, consultez Octroi d’autorisations d’afficher des données non masquées.
- Pour supprimer un masquage des données dynamique, consultez Suppression d’un masquage Dynamic Data.
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
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
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
- Créer ou mettre à jour : Crée ou met à jour une règle de masquage des données de la base de données.
- Liste par base de données : Fournit une liste des règles de masquage des données de la base 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.
Créer un schéma pour contenir des tables utilisateur :
CREATE SCHEMA Data; GO
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 );
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');
Créer un schéma pour contenir des tables de service :
CREATE SCHEMA Service; GO
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 );
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');
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
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;
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;
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;
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;
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;
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;
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;