Tous les produits
Search
Centre de documentation

MaxCompute:Masquage dynamique des données

Dernière mise à jour :Oct 16, 2026

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 explique comment activer la fonctionnalité de masquage dynamique des données dans MaxCompute et fournit des exemples d'utilisation.

Instructions

  1. Lisez le contenu en anglais pour comprendre CE qui doit être communiqué

  2. Rédigez le texte en français À PARTIR DE ZÉRO — oubliez la structure des phrases anglaises

  3. Conservez exactement toute la mise en forme Markdown, les blocs de code, les liens et les images

  4. Balises xref (<a data-tag="xref" ...>texte</a>) — conservez la balise ENTIERE avec tous ses attributs dans l'ordre et la casse d'origine, traduisez UNIQUEMENT le texte visible entre > et

  5. Appliquez strictement toutes les règles spécifiques à la langue

  6. Appliquez les règles relatives aux mots interdits avec une tolérance zéro

  7. Utilisez le mode impératif dans les étapes numérotées et les listes à puces procédurales

  8. Assurez la cohérence terminologique — un même terme doit toujours recevoir la même traduction

  9. Variez les débuts de phrase dans les listes et les tableaux — aucun début ne doit être répété plus de 2 fois

  10. Renvoyez UNIQUEMENT le document markdown en français, sans explication

    Introduction

    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 ne peuvent pas accéder, 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 date, 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.

    image

    Notes d'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

      Pris en charge

      odpscmd

      0.47.1 ou ultérieure

      Pris en charge

      JDBC

      3.4.3 ou ultérieure

      Pris en charge

      MaxFrame

      Toutes les versions

      Pris en charge

      PyODPS

      Toutes les versions

      Pris en charge

      Go SDK

      Toutes les versions

      Pris en charge

    • Tables internes et externes

      • Les politiques de masquage sont prises en charge pour les tables internes et externes MaxCompute.

      • Actuellement, si une table contient des données de type JSON et qu'une requête implique des données dans des colonnes JSON, les fonctionnalités de masquage des données et d'autorisation au niveau des lignes s'excluent mutuellement. Vous ne pouvez pas configurer une politique d'autorisation au niveau des lignes pour une table qui possède déjà une politique de masquage des données, 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.

    image

    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 Manage Configurations > Projects. 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 ayant reçu le rôle Super_Administrator ou Admin au niveau du projet peuvent configurer cette propriété. Pour plus d'informations, consultez la rubrique Gérer les rôles intégrés.

    Après l'activation ou la désactivation du masquage des données, la modification prend environ 15 minutes pour être effective en raison du délai d'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 au maximum 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

      Parameter

      Required

      Description

      policy_name

      Yes

      Nom de la politique de masquage. Le nom de la politique ne respecte 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. La longueur maximale du nom est de 128 octets.

      USER | ROLE | default

      Yes

      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 commande list users; pour afficher les informations relatives aux 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 commande list roles; pour afficher les informations relatives aux 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

      Yes

      Politique de masquage prédéfinie. Pour plus d'informations, consultez la section 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

      Parameter

      Required

      Description

      policy_name

      Yes

      Nom de la politique de masquage.

      table_name

      Yes

      Nom de la table contenant les données sensibles.

      column_name

      Yes

      Nom de la colonne contenant les 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

      Parameter

      Required

      Description

      policy_name

      Yes

      Nom de la politique de masquage.

      table_name

      Yes

      Nom de la table contenant les données sensibles.

      column_name

      Yes

      Nom de la colonne contenant les données sensibles.

      user_name

      Yes

      Nom d'utilisateur.

      role_name

      Yes

      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.

    • Types de données pris en charge : Tous.

    • Exemple

      -- Before masking (data type: STRING)
      +-----------------+
      | col_string      |
      +-----------------+
      | Michael Johnson |
      +-----------------+
      
      -- Masking policy
      MASKED_NULLIFY
      
      -- After masking
      +------------+
      | col_string | 
      +------------+
      | 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.

    • Types de données pris en charge : Tous.

    • Exemple

      -- Before masking (data type: TIMESTAMP)
      +---------------------+
      | col_timestamp       |
      +---------------------+
      | 2024-05-01 11:12:13 |
      +---------------------+
      -- Masking policy
      MASKED_DV
      -- After masking (The default project time zone is China Standard Time, UTC+8)
      +---------------------+
      | col_timestamp       | 
      +---------------------+
      | 1970-01-01 08:00:00 | 
      +---------------------+

    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).

    • Types de données pris en charge : DATE, DATETIME, TIMESTAMP_NTZ et TIMESTAMP.

    • Exemple

      -- Before masking (data type: TIMESTAMP)
      +---------------------+
      | col_timestamp       |
      +---------------------+
      | 2024-05-01 11:12:13 |
      +---------------------+
      -- Masking policy
      MASKED_DATE_YEAR
      -- After masking (The default project time zone is China Standard Time, UTC+8)
      +---------------------+
      | col_timestamp       | 
      +---------------------+
      | 2024-01-01 08:00:00 | 
      +---------------------+

    Arrondi

    MASKED_POINT_RESERVE(<num>)

    Arrondit un nombre à un nombre spécifié de décimales, de 0 à 5.

    • num : Le nombre de décimales à conserver. La valeur doit être un entier compris entre 0 et 5.

    • Types de données pris en charge : DECIMAL, FLOAT et DOUBLE.

    • Exemple

      -- Before masking (data type: FLOAT)
          +-----------+
          | col_float |
          +-----------+
          | 1.12345   |
          +-----------+
          -- Masking policy: retain 2 decimal places
          MASKED_POINT_RESERVE(2)
          -- After masking
          +-----------+
          | col_float | 
          +-----------+
          | 1,12      | 
          +-----------+

    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 (*) et affiche la partie centrale en texte clair.

    • before : Le début de la chaîne est remplacé par *. Le paramètre before spécifie la longueur du masque et doit être un entier supérieur ou égal à 0. Si before est égal à 0, le début de la chaîne n'est pas masqué.

    • after : La fin de la chaîne est remplacée par *. La longueur du masque est spécifiée par le paramètre after, qui doit être un entier supérieur ou égal à 0.

    • Types de données pris en charge : STRING, VARCHAR, CHAR et BINARY.

    • Exemple

      -- Before masking (data type: STRING)
          +-----------------+
          | col_string      |
          +-----------------+
          | Michael Johnson |
          +-----------------+
          -- Masking policy: replace the first 3 and last 3 characters with asterisks.
          MASKED_STRING_MASKED_BA(3, 3)
          -- After masking
          +-----------------+
          | col_string      | 
          +-----------------+
          | ***hael John*** | 
          +-----------------+

    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 (*).

    • before : Le nombre de caractères à afficher en texte clair au début de la chaîne. La valeur doit être un entier supérieur ou égal à 0.

    • after : Le nombre de caractères à afficher en texte clair à la fin de la chaîne. La valeur doit être un entier supérieur ou égal à 0.

    • Types de données pris en charge : STRING, VARCHAR, CHAR et BINARY.

    • Exemple

      -- Before masking (data type: STRING)
          +-----------------+
          | col_string      |
          +-----------------+
          | Michael Johnson |
          +-----------------+
          -- Masking policy: display the first and last characters in plaintext.
          MASKED_STRING_UNMASKED_BA(1, 1)
          -- After masking
          +-----------------+
          | col_string      | 
          +-----------------+
          | M*************n | 
          +-----------------+

    Hachage

    Hachage SHA-256

    MASKED_SHA256(<salt>)

    Masque les données à l'aide de l'algorithme de hachage SHA-256.

    • salt : Le sel. La valeur doit être un entier compris entre 0 et 9.

    • Types de données pris en charge : STRING, VARCHAR, CHAR et BINARY.

    • Exemple

      -- Before masking (data type: STRING)
          +------------------------+
          | col_string             | 
          +------------------------+
          | 4562-1234-5678-9123    | 
          +------------------------+
          -- Masking policy
          MASKED_SHA256(0)
          -- After masking
          +------------------------------------------------+
          | col_string                                     | 
          +------------------------------------------------+
          | zwGMB1aCF1t705EfcwdDorql4MZb46XBqQJw/2RVx8U=    | 
          +------------------------------------------------+

    Hachage SHA-512

    MASKED_SHA512(<salt>)

    Masque les données à l'aide de l'algorithme de hachage SHA-512.

    • salt : Le sel. La valeur doit être un entier compris entre 0 et 9.

    • Types de données pris en charge : STRING, VARCHAR, CHAR et BINARY.

    • Exemple

      -- Before masking (data type: STRING)
          +------------------------+
          | col_string             | 
          +------------------------+
          | 4562-1234-5678-9123    | 
          +------------------------+
          -- Masking policy
          MASKED_SHA512(0)
          -- After masking
          +------------------------------------------------------------------------------------------+
          | col_string                                                                               | 
          +------------------------------------------------------------------------------------------+
          | 3PPywfEIp08WuTUI8FZCCfdVuRu68wZTVwWWVAf4pboACUnH6w9kFMLpl2AARaGW/mvWvg26p0EIqmE0fAEiuA== | 
          +------------------------------------------------------------------------------------------+

    Hachage MD5

    MASKED_MD5(<salt>)

    Masque les données à l'aide de l'algorithme de hachage MD5.

    • salt : Le sel. La valeur doit être un entier compris entre 0 et 9.

    • Types de données pris en charge : STRING, VARCHAR, CHAR et BINARY.

    • Exemple

      -- Before masking (data type: STRING)
          +------------------------+
          | col_string             | 
          +------------------------+
          | 4562-1234-5678-9123    | 
          +------------------------+
          -- Masking policy
          MASKED_MD5(0)
          -- After masking
          +--------------------------+
          | col_string               | 
          +--------------------------+
          | mK/o08tew5g7S3XV/BkFfw== | 
          +--------------------------+

    Hachage SM3

    MASKED_SM3(<salt>)

    Masque les données à l'aide de l'algorithme de hachage SM3.

    • salt : Le sel. La valeur doit être un entier compris entre 0 et 9.

    • Types de données pris en charge : STRING, VARCHAR, CHAR et BINARY.

    • Exemple

      -- Before masking (data type: STRING)
          +------------------------+
          | col_string             | 
          +------------------------+
          | 4562-1234-5678-9123    | 
          +------------------------+
          -- Masking policy
          MASKED_SM3(0)
          -- After masking
          +------------------------------------------------+
          | col_string                                     | 
          +------------------------------------------------+
          | Q2TfwUh4B8QQH8jPL6DfdoGysx/CXBxn2T14dDwQtQw=    | 
          +------------------------------------------------+

    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.

    • position : Un entier qui spécifie où commencer le remplacement.

      • Si position = 0, toute la chaîne est remplacée par des caractères aléatoires.

      • Si position > 0, les premiers caractères position sont remplacés par des caractères aléatoires.

      • Si position < 0, les N derniers caractères sont remplacés, où N est la valeur absolue de position.

    • Types de données pris en charge : STRING, VARCHAR, CHAR et BINARY.

    • Exemple

      -- Before masking (data type: STRING)
          +-----------------+
          | col_string      |
          +-----------------+
          | Michael Johnson |
          +-----------------+
          -- Masking policy: replace the first 7 characters with random characters.
          MASKED_REPLACE_RANDOM(7)
          -- After masking
          +-----------------+
          | col_string      | 
          +-----------------+
          | 4DlJQxi Johnson | 
          +-----------------+

    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.

    • before : Le nombre de caractères à remplacer au début de la chaîne. La valeur doit être un entier supérieur ou égal à 0. Si la valeur est 0, aucun caractère n'est remplacé au début.

    • after : Le nombre de caractères à remplacer à la fin de la chaîne. La valeur doit être un entier supérieur ou égal à 0.

    • Types de données pris en charge : STRING, VARCHAR, CHAR et BINARY.

    • Exemple

      -- Before masking (data type: STRING)
          +-----------------+
          | col_string      |
          +-----------------+
          | Michael Johnson |
          +-----------------+
          -- Masking policy: replace the first 4 and last 4 characters with random characters.
          MASKED_REPLACE_RANDOM_BA(4,4)
          -- After masking
          +------------------+
          | col_string       | 
          +------------------+
          | r0xEael JohnWNr  | 
          +------------------+

    Remplacement fixe

    MASKED_REPLACE_FIXED(<position>, <fixed_string>)

    • Remplace les données par une chaîne fixe.

    • position : Un entier qui spécifie où le remplacement a lieu.

      • Si position = 0, toute la chaîne est remplacée par fixed_string.

      • Si position > 0, les premiers caractères position sont remplacés par fixed_string.

      • Si position < 0, les N derniers caractères sont remplacés par fixed_string, où N est la valeur absolue de position.

    • fixed_string : La chaîne de remplacement. Elle peut contenir jusqu'à 100 caractères et ne peut pas contenir d'espaces.

    • Types de données pris en charge : STRING, VARCHAR, CHAR et BINARY.

    • Exemple

      -- Before masking (data type: STRING)
          +-----------------+
          | col_string      |
          +-----------------+
          | Michael Johnson |
          +-----------------+
          -- Masking policy: replace the first 7 characters with the fixed string "Oli".
          MASKED_REPLACE_FIXED(7, "Oli")
          -- After masking
          +-------------+
          | col_string  | 
          +-------------+
          | Oli Johnson | 
          +-------------+

    Exemples

    Masquer les informations personnelles sensibles

    Cet exemple illustre la configuration de politiques de masquage pour protéger les informations personnelles sensibles.

    1. Préparez les données.

      Créez une table destinée à stocker les informations personnelles et insérez-y 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);
    2. Configurez les politiques de masquage.

      • Pour les noms, conservez uniquement le premier caractère et remplacez les autres 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 taille à 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, ne conservez que 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;
    3. 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 n'ont accès qu'aux données hachées avec SHA-256.

    Remarque

    Les utilisateurs A et B correspondent à la fois aux politiques MASKED_SHA256(5) et UNMASKED. Le système applique UNMASKED, car cette politique possède une priorité plus élevée. Pour plus d'informations, consultez la section 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 qui présente 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. Comme un chiffre plus bas indique une priorité plus élevée, la politique MASKED_REPLACE_RANDOM(3) est appliquée. L'utilisateur A voit les données masquées par 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 basse)

    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 mappe vide.

    JSON

    "" (chaîne vide)

    STRUCT

    (valeurs par défaut des types de champs)