Pour permettre à certains utilisateurs de consulter les données sensibles d'un projet MaxCompute tout en masquant les informations clés, activez le masquage dynamique des données. Cette fonctionnalité masque ou remplace les données sensibles en temps réel lors de leur accès afin de prévenir les fuites de données. Cette rubrique décrit comment activer la fonctionnalité de masquage dynamique des données dans MaxCompute et fournit des exemples d'utilisation.
Présentation
MaxCompute propose le masquage dynamique des données pour protéger les informations sensibles, telles que les données personnelles identifiables (PII), dans des scénarios tels que le développement, les tests, le partage de données et les opérations. Contrairement aux listes de contrôle d'accès (ACL) au niveau des colonnes, qui obligent les utilisateurs à modifier leurs requêtes pour exclure les colonnes auxquelles ils n'ont pas accès, le masquage dynamique des données fonctionne automatiquement sans modifier les requêtes existantes. Lorsqu'un utilisateur accède aux données, le système applique automatiquement la politique de masquage appropriée en fonction de l'utilisateur ou de son rôle. Cela garantit que les données sont masquées lors des requêtes, des téléchargements, des jointures et des calculs de fonctions définies par l'utilisateur (UDF), et atténue le risque d'exposition des données sensibles.
Les politiques de masquage prennent en charge diverses méthodes, notamment le masquage, le hachage, le remplacement de caractères, l'arrondi numérique et la troncature de dates, pour protéger des données telles que les numéros d'identification, les numéros de carte bancaire, les adresses et les numéros de téléphone. MaxCompute applique le masquage des données dès la première étape de la récupération des données depuis le stockage. Cette approche garantit des performances élevées et une sécurité optimale.

Remarques sur l'utilisation
-
Régions prises en charge
Cette fonctionnalité est en aperçu public et n'est disponible que dans les régions suivantes : Chine (Hangzhou), Chine (Shanghai), Chine (Beijing), Chine (Zhangjiakou), Chine (Ulanqab), Chine (Shenzhen), Chine (Chengdu), Chine (Hong Kong), Japon (Tokyo), Singapour, Malaisie (Kuala Lumpur), Indonésie (Jakarta), Allemagne (Francfort), États-Unis (Silicon Valley) et États-Unis (Virginie).
-
Versions de pilote prises en charge
|
**Méthode de connexion**
|
**Version minimale**
|
**Prise en charge du masquage**
| | --- | --- | --- | |
Java SDK
|
0.48.0-public ou ultérieure
|
Prise en charge
| |
odpscmd
|
0.47.1 ou ultérieure
|
Prise en charge
| |
JDBC
|
3.4.3 ou ultérieure
|
Prise en charge
| |
MaxFrame
|
Toutes les versions
|
Prise en charge
| |
PyODPS
|
Toutes les versions
|
Prise en charge
| |
Go SDK
|
Toutes les versions
|
Prise en charge
| -
Tables internes et externes
Les politiques de masquage sont prises en charge pour les tables internes et externes MaxCompute.
Le masquage dynamique des données et les autorisations au niveau des lignes s'excluent mutuellement. Vous ne pouvez pas configurer d'autorisations au niveau des lignes pour une table qui possède déjà une politique de masquage, et vice versa.
Lorsque vous appliquez une politique de masquage à des caractères chinois, l'encodage des caractères doit être UTF-8.
-
Vues
Les vues standard prennent en charge les politiques de masquage. Les politiques appliquées à une vue sont synchronisées avec celles de la table source. Lorsqu'une politique de masquage est liée ou dissociée de la table source, la modification prend effet immédiatement sur la vue.
Une vue matérialisée hérite des politiques de masquage de sa table source au moment de sa création. Les modifications ultérieures apportées aux politiques de la table source n'affectent pas la vue matérialisée.
-
Politiques de masquage
Si plusieurs politiques de masquage s'appliquent à un utilisateur, celle ayant la priorité la plus élevée est utilisée. Pour plus d'informations, consultez Priorités des politiques.
Fonctionnement
Le propriétaire du projet ou les utilisateurs disposant du rôle Super_Administrator ou Admin peuvent gérer les politiques de masquage. Lorsqu'un utilisateur accède à une table contenant des données sensibles, le système vérifie les politiques de masquage associées à l'utilisateur ou à son rôle et renvoie soit des données masquées, soit des données en texte clair, selon le cas.

Autorisations de masquage
Seul le propriétaire du projet ou les utilisateurs auxquels le rôle Super_Administrator ou Admin au niveau du projet a été attribué peuvent activer ou désactiver la fonctionnalité de masquage dynamique des données pour un projet.
Les autorisations requises pour gérer les politiques de masquage d'une table sont les suivantes :
Par défaut, le propriétaire du projet ou les utilisateurs disposant du rôle Super_Administrator ou Admin au niveau du projet possèdent les autorisations requises.
-
Vous pouvez également accorder des autorisations à un utilisateur RAM ou à un rôle RAM à l'aide d'un rôle de projet administratif personnalisé. Connectez-vous à la console MaxCompute. Dans le volet de navigation de gauche, choisissez . Sur la page de gestion de votre projet, accédez à la page Project Settings et sélectionnez l'onglet Role Permissions. Cliquez sur Create Project-level Role pour créer un rôle de projet avec des autorisations MaxCompute. Définissez le Type de rôle sur Admin (rôle de gestion) et utilisez une instruction de politique similaire à l'exemple suivant :
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "odps:CreateDataMaskingPolicy","odps:ListDataMaskingPolicies"], "Resource": [ "acs:odps:*:projects/[project_name]/authorization/datamaskingpolicies" ] }, { "Effect": "Allow", "Action": [ "odps:DropDataMaskingPolicy", "odps:DescribeDataMaskingPolicy" ], "Resource": [ "acs:odps:*:projects/[project_name]/authorization/datamaskingpolicies/*" ] }, { "Effect": "Allow", "Action": "odps:ApplyDataMaskingPolicy", "Resource": [ "acs:odps:*:projects/[project_name]/authorization/tables/*", "acs:odps:*:projects/[project_name]/authorization/datamaskingpolicies/*" ] } ] }
Commandes
Activer ou désactiver le masquage des données
Le commutateur de masquage des données odps.data.masking.policy.enable est une propriété au niveau du projet. Seul le propriétaire du projet ou les utilisateurs auxquels le rôle Super_Administrator ou Admin au niveau du projet a été attribué peuvent configurer cette propriété. Pour plus d'informations, consultez Gérer les rôles intégrés.
Après avoir activé ou désactivé le masquage des données, la modification prend environ 15 minutes pour être effective en raison de la latence de l'actualisation du cache.
-
Activez le masquage dynamique des données pour le projet.
setproject odps.data.masking.policy.enable=true; -
Désactivez le masquage dynamique des données pour le projet.
setproject odps.data.masking.policy.enable=false;
Créer et supprimer des politiques de masquage
Un projet peut comporter un maximum de 1 000 politiques de masquage.
-
Syntaxe
-
Créez une politique de masquage.
CREATE DATA MASKING POLICY [IF NOT EXISTS] <policy_name> TO { USER <user_list> | ROLE <role_list> | default } USING <Predefined Masking Policy>; -
Supprimez une politique de masquage.
DROP DATA MASKING POLICY <policy_name>;
-
-
Paramètres
Paramètre
Obligatoire
Description
policy_name
Oui
Nom de la politique de masquage. Le nom de la politique ne distingue pas la casse et ne peut contenir que des lettres (a–z, A–Z), des chiffres (0–9) et des traits de soulignement (_). Il est recommandé de commencer le nom par une lettre. Le nom peut comporter jusqu'à 128 octets.
USER | ROLE | default
Oui
Choisissez l'une des options suivantes :
USER : Applique la politique à des utilisateurs spécifiques. Dans
<user_list>, spécifiez les noms des utilisateurs. Vous pouvez exécuter la commandelist users;pour afficher les informations sur les utilisateurs.ROLE : Applique la politique à des rôles spécifiques. Dans
<role_list>, spécifiez les noms des rôles. Vous pouvez exécuter la commandelist roles;pour afficher les informations sur les rôles.default : Applique la politique par défaut. Si aucune autre politique de masquage ne correspond à un utilisateur ou à un rôle, la politique par défaut est appliquée.
Predefined Masking Policy
Oui
Politique de masquage prédéfinie. Pour plus d'informations, consultez Politiques de masquage prédéfinies.
-
Exemples
-
Exemple 1 : Créez une politique de hachage MD5 pour userA, userB et userC.
CREATE data masking policy IF NOT EXISTS masking_test_001 TO USER (userA, userB, userC) USING MASKED_MD5(0); -
Exemple 2 : Créez une politique de hachage MD5 pour les rôles de développement et d'exploitation d'un projet.
CREATE data masking policy IF NOT EXISTS masking_test_001 TO ROLE (role_project_deploy, role_project_dev) USING MASKED_MD5(0);
-
Appliquer des politiques aux colonnes
-
Syntaxe
--Bind a policy to a column APPLY DATA MASKING POLICY <policy_name> BIND TO TABLE <table_name> COLUMN <column_name>; --Unbind a specific masking policy from a sensitive data column APPLY DATA MASKING POLICY <policy_name> UNBIND FROM TABLE <table_name> COLUMN <column_name>; --Unbind all masking policies from a sensitive data column APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name> COLUMN <column_name>; --Unbind all masking policies from all sensitive data columns of a table APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name>; -
Paramètres
Paramètre
Obligatoire
Description
policy_name
Oui
Nom de la politique de masquage.
table_name
Oui
Nom de la table contenant des données sensibles.
column_name
Oui
Nom de la colonne contenant des données sensibles.
Afficher les politiques de masquage
-
Syntaxe
--View the creation information of a masking policy DESC DATA MASKING POLICY <policy_name>; --View a table's extended information, including its masking policies DESC EXTENDED <table_name>; --List the names of all masking policies in the current project LIST DATA MASKING POLICY; --List the names of masking policies bound to a specific user LIST DATA MASKING POLICY TO USER <user_name>; --List the names of masking policies bound to a specific role LIST DATA MASKING POLICY TO ROLE <role_name>; --List the names of all masking policies bound to a specific table LIST DATA MASKING POLICY ON <table_name>; --List the names of all masking policies bound to a specific column of a table LIST DATA MASKING POLICY ON <table_name> TO COLUMN <column_name>; -
Paramètres
Paramètre
Obligatoire
Description
policy_name
Oui
Nom de la politique de masquage.
table_name
Oui
Nom de la table contenant des données sensibles.
column_name
Oui
Nom de la colonne contenant des données sensibles.
user_name
Oui
Nom d'utilisateur.
role_name
Oui
Nom du rôle.
Politiques de masquage prédéfinies
Les politiques de masquage prédéfinies incluent des méthodes telles que le masquage, le hachage, le remplacement de caractères et l'arrondi. Choisissez une politique en fonction du type de données et de vos exigences de protection.
Type de politique | Nom de la politique | Syntaxe | Description |
Général | Pas de masquage | UNMASKED | Renvoie les données en texte clair. Types de données pris en charge : Tous. |
Nullification | MASKED_NULLIFY | Remplace les données par NULL.
| |
Valeur par défaut | MASKED_DV | Remplace la valeur par la valeur par défaut du type de données correspondant. Pour plus d'informations, consultez Valeurs par défaut pour MASKED_DV.
| |
Troncature de date | MASKED_DATE_YEAR | Conserve uniquement la partie année d'une valeur temporelle et réinitialise le mois, le jour et l'heure au début de cette année (1er janvier, 00:00:00 UTC).
| |
Arrondi | MASKED_POINT_RESERVE(<num>) | Arrondit un nombre à un nombre spécifié de décimales, de 0 à 5.
| |
Masquage | Masquer le début et la fin | MASKED_STRING_MASKED_BA(<before>, <after>) | Masque le début et la fin d'une chaîne avec des astérisques (
|
Masquer le milieu | MASKED_STRING_UNMASKED_BA(<before>, <after>) | Affiche le début et la fin d'une chaîne en texte clair et masque la partie centrale avec des astérisques (
| |
Hachage | Hachage SHA-256 | MASKED_SHA256(<salt>) | Masque les données à l'aide de l'algorithme de hachage SHA-256.
|
Hachage SHA-512 | MASKED_SHA512(<salt>) | Masque les données à l'aide de l'algorithme de hachage SHA-512.
| |
Hachage MD5 | MASKED_MD5(<salt>) | Masque les données à l'aide de l'algorithme de hachage MD5.
| |
Hachage SM3 | MASKED_SM3(<salt>) | Masque les données à l'aide de l'algorithme de hachage SM3.
| |
Remplacement de caractères | Remplacement aléatoire | MASKED_REPLACE_RANDOM(<position>) | Remplace les données par des caractères aléatoires, y compris des chiffres et des lettres. La longueur de la chaîne reste inchangée.
|
Remplacement aléatoire au début et à la fin | MASKED_REPLACE_RANDOM_BA(<before>, <after>) | Remplace le début et la fin d'une chaîne par des caractères aléatoires, y compris des chiffres et des lettres. La longueur de la chaîne reste inchangée.
| |
Remplacement fixe | MASKED_REPLACE_FIXED(<position>, <fixed_string>) |
|
Exemples
Masquer les informations personnelles sensibles
Cet exemple montre comment configurer des politiques de masquage pour masquer les informations personnelles sensibles.
-
Préparez les données.
Créez une table pour stocker les informations personnelles et insérez des données sensibles.
-- Create a table for sensitive information. CREATE TABLE if NOT EXISTS personal_info ( id bigint COMMENT 'The unique ID of the user.', name string COMMENT 'The name of the user.', age int COMMENT 'The age of the user.', gender string COMMENT 'The gender of the user.', height float COMMENT 'The height of the user.', birthday date COMMENT 'The birth date of the user.', phone_number string COMMENT 'The phone number of the user.', email string COMMENT 'The email address of the user.', address string COMMENT 'The address of the user.', salary decimal(18, 2) COMMENT 'The salary of the user.', create_time timestamp COMMENT 'The time when the user information was created.', update_time timestamp COMMENT 'The time when the user information was updated.', is_deleted boolean COMMENT 'Indicates whether the user information is deleted.' ); -- Insert sensitive data. INSERT INTO personal_info VALUES (1, 'Zhang San', 18, 'Male', 178.56, '1990-01-01', '13800000000', 'zhangsan@example.com', 'Haidian District, Beijing', 5000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00', false), (2, 'Li Si', 20, 'Female', 162.70, '1992-02-02', '13900000000', 'lisi@example.com', 'Pudong New Area, Shanghai', 6000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00',false), (3, 'Wang Wu', 22, 'Male', 185.21, '1994-03-03', '14000000000', 'wangwu@example.com', 'Nanshan District, Shenzhen', 7000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00', false); -
Configurez les politiques de masquage.
-
Pour les noms, conservez uniquement le premier caractère et remplacez le reste par des astérisques (
*).CREATE data masking policy IF NOT EXISTS masking_name TO USER (RAM$xxx@test.aliyunid.com:xxx) USING MASKED_STRING_UNMASKED_BA(1, 0); apply data masking policy masking_name bind TO TABLE personal_info COLUMN name; -
Arrondissez les valeurs de hauteur à l'entier le plus proche.
CREATE data masking policy IF NOT EXISTS masking_height TO USER (RAM$xxx@test.aliyunid.com:xxx) USING MASKED_POINT_RESERVE(0); apply data masking policy masking_height bind TO TABLE personal_info COLUMN height; -
Pour les dates de naissance, conservez uniquement l'année.
CREATE data masking policy IF NOT EXISTS masking_birthday TO USER (RAM$xxx@test.aliyunid.com:xxx) USING MASKED_DATE_YEAR; apply data masking policy masking_birthday bind TO TABLE personal_info COLUMN birthday; -
Pour les utilisateurs par défaut, hachez les numéros de téléphone à l'aide de l'algorithme SM3.
CREATE DATA MASKING POLICY default_sm3 TO DEFAULT USING MASKED_SM3(0); apply data masking policy default_sm3 bind TO TABLE personal_info COLUMN phone_number;
-
-
Utilisez un compte soumis aux politiques de masquage pour interroger les données.
SELECT id, name, height, birthday, phone_number FROM personal_info; -- Before masking +------------+-----------+--------+------------+--------------+ | id | name | height | birthday | phone_number | +------------+-----------+--------+------------+--------------+ | 1 | Zhang San | 178.56 | 1990-01-01 | 13800000000 | | 2 | Li Si | 162.7 | 1992-02-02 | 13900000000 | | 3 | Wang Wu | 185.21 | 1994-03-03 | 14000000000 | +------------+-----------+--------+------------+--------------+ -- After masking +------------+------------+------------+------------+------------------------------------------------+ | id | name | height | birthday | phone_number | +------------+------------+------------+------------+------------------------------------------------+ | 1 | Z******** | 179.0 | 1990-01-01 | lvYJaH4ElL2ilpQx/8tfMUw7xP22yblIgmfWp0/msUQ= | | 2 | L**** | 163.0 | 1992-01-01 | 9fFWacNSwCRZLAjMHqunlfwkqhTbP2ubuDOeOSh4N1c= | | 3 | W****** | 185.0 | 1994-01-01 | k/0JoQCSarJg9ATJ5tyVnhQf1jIBxHXRbB+cvUm4OmE= | +------------+------------+------------+------------+------------------------------------------------+
Masquage par défaut
Cet exemple montre comment fonctionne la priorité des politiques lorsqu'un utilisateur ou un rôle correspond à plusieurs politiques de masquage.
Appliquez la politique MASKED_SHA256(5) aux utilisateurs par défaut.
CREATE DATA MASKING POLICY default_hash_policy
TO DEFAULT
USING MASKED_SHA256(5);
Appliquez la politique UNMASKED aux utilisateurs spécifiques A et B.
CREATE DATA MASKING POLICY ab_unmask_policy
TO USER (A, B)
USING UNMASKED;
Résultat : Les utilisateurs A et B peuvent accéder aux données en texte clair. Les autres utilisateurs ne peuvent accéder qu'aux données hachées SHA-256.
Les utilisateurs A et B correspondent aux politiques MASKED_SHA256(5) et UNMASKED. Le système applique UNMASKED car elle a une priorité plus élevée. Pour plus d'informations, consultez Priorités des politiques. Les autres utilisateurs ne correspondent qu'à la politique MASKED_SHA256(5).
Annexe
Priorités des politiques
Lorsque plusieurs politiques de masquage s'appliquent à un utilisateur, celle ayant la priorité la plus élevée est utilisée.
Par exemple, un utilisateur nommé A accède à la colonne col_string et correspond à deux politiques de masquage : MASKED_REPLACE_RANDOM(3) avec un niveau de priorité 3 et MASKED_SM3 avec un niveau de priorité 4. Étant donné qu'un nombre inférieur indique une priorité plus élevée, la politique MASKED_REPLACE_RANDOM(3) est appliquée. L'utilisateur A voit les données masquées avec des caractères aléatoires.
Priorité | Politique de masquage |
0 (La plus élevée) | UNMASKED |
1 | MASKED_POINT_RESERVE(num) |
2 | MASKED_DATE_YEAR |
3 | MASKED_STRING_MASKED_BA(before, after) |
MASKED_STRING_UNMASKED_BA(before, after) | |
MASKED_REPLACE_RANDOM(position) | |
MASKED_REPLACE_RANDOM_BA(before, after) | |
MASKED_REPLACE_FIXED(position, fixed_string) | |
4 | MASKED_SHA256 |
MASKED_SHA512 | |
MASKED_MD5 | |
MASKED_SM3 | |
5 | MASKED_DV |
6 (La plus faible) | MASKED_NULLIFY |
Valeurs par défaut pour MASKED_DV
|**Type**
|
**Valeur par défaut**
| | --- | --- | |
BIGINT
|
0
| |
DOUBLE
|
0.0
| |
DECIMAL
|
0
| |
STRING
|
"" (chaîne vide)
| |
DATETIME
|
DATETIME '1970-01-01 00:00:00' (UTC)
| |
BOOLEAN
|
false
| |
TINYINT
|
0
| |
SMALLINT
|
0
| |
INT
|
0
| |
BINARY
|
'' (chaîne binaire vide)
| |
FLOAT
|
0.0
| |
DOUBLE
|
0.0
| |
DECIMAL
|
0
| |
VARCHAR(n)
|
"" (chaîne vide)
| |
CHAR(n)
|
" " (n espaces)
| |
DATE
|
DATE '1970-01-01'
| |
TIMESTAMP
|
TIMESTAMP '1970-01-01 00:00:00' (UTC)
| |
TIMESTAMP_NTZ
|
TIMESTAMP '1970-01-01 00:00:00' (UTC)
| |
ARRAY
|
Un tableau vide.
| |
MAP
|
Une map vide.
| |
JSON
|
"" (chaîne vide)
| |
STRUCT
|
(valeurs par défaut des types de champ)
|