Tous les produits
Search
Centre de documentation

Hologres:Data masking

Dernière mise à jour :Aug 11, 2026

Hologres propose une fonctionnalité de masquage des données pour protéger les informations sensibles au niveau des colonnes. Une fois activée, cette fonctionnalité masque automatiquement les données sensibles dans les résultats des requêtes afin de renforcer la sécurité. Cette rubrique explique comment activer le masquage des données et gérer les règles associées.

Contexte

L'adoption généralisée des technologies du big data, telles que le cloud computing et l'IA, libère une valeur inédite des données. Toutefois, cela pose également des défis majeurs en matière de protection des informations sensibles et privées.

Le masquage des données Hologres vous permet de définir des règles au niveau des utilisateurs et des colonnes. Lors de l'exécution des requêtes, les données sont masquées conformément à ces règles, ce qui empêche toute exposition non autorisée d'informations sensibles. Vous pouvez ainsi partager et analyser les données en toute sécurité tout en garantissant l'anonymisation des informations privées.

Comparaison des versions

Hologres a optimisé le comportement du masquage des données à partir de la version V3.1. Le tableau suivant compare les fonctionnalités des versions V3.1 et ultérieures avec celles des versions antérieures.

Fonctionnalité

V3.1 et versions ultérieures

V3.0 et versions antérieures

Masquage pour les types de données autres que TEXT

Prend en charge les politiques de masquage par défaut pour les types de données tels que INT, FLOAT et les tableaux. Ces politiques ne s'appliquent que lorsque la politique de masquage est définie sur l'utilisation d'une valeur par défaut. Pour plus d'informations, consultez Valeurs par défaut.

Non pris en charge. Vous pouvez contourner cette limitation en utilisant CAST TEXT. (Non recommandé)

Vue

Les résultats sont masqués.

Les résultats ne sont pas masqués. (Non recommandé)

Clauses JOIN ou WHERE avec des colonnes masquées

Le résultat est vide.

Les résultats ne sont pas masqués. (Non recommandé)

Consommation Flink des journaux binaires pour les colonnes masquées

  • Si la table consommée est masquée pour l'utilisateur, la consommation des journaux binaires est interdite dans tous les modes.

  • Si la table consommée n'est pas masquée pour l'utilisateur, la consommation des journaux binaires est autorisée dans tous les modes.

  • Dans les versions antérieures à la V2.2.38 et dans les versions allant de la V3.0.1 à la V3.0.19 :

    • Le mode Fixed FE ne prend pas en charge la consommation des colonnes masquées.

    • Le mode FE prend en charge la consommation des colonnes masquées.

  • Dans les versions allant de la V3.0.19 à la V3.0.27 :

    Les modes Fixed FE et FE interdisent la consommation des journaux binaires. Pour consommer les journaux binaires, désactivez le masquage des données pour l'utilisateur sur toutes les tables.

    -- Disable data masking for this user.
    ALTER ROLE "<user>" SET hg_anon_enable = OFF;
    -- Disable data masking for this user in a single database.
    ALTER ROLE "<user>" IN DATABASE <database> SET hg_anon_enable = OFF;
  • À partir de la version V3.0.28, vous pouvez consommer les journaux binaires en modes Fixed FE et FE si vous n'avez pas appliqué de règles de masquage aux résultats de la table, même si les paramètres GUC liés au masquage des données sont activés.

Lectures directes des colonnes masquées depuis MaxCompute

Interdit à MaxCompute de lire directement les colonnes Hologres masquées.

La lecture est prise en charge. (Non recommandé)

Vérifier la version du masquage des données

SELECT hologres.get_hg_anon_version();

Prérequis

Avant d'utiliser le masquage des données, un superutilisateur doit exécuter les commandes suivantes au niveau de la base de données.

--Run as a superuser
CREATE EXTENSION IF NOT EXISTS hg_anon;  
ALTER DATABASE <current_db> SET hg_anon_enable = on;

Après avoir exécuté ces instructions, le comportement du masquage des données dépend de la version de votre instance Hologres. Vous pouvez également sélectionner manuellement un comportement spécifique en fonction de vos besoins métier :

  • Si le comportement de masquage des données de la version V3.1 ou ultérieure ne répond pas à vos attentes, revenez au comportement de la version V3.0 en exécutant l'instruction suivante :

    CALL hologres.set_hg_anon_version(1);
  • Les instances des versions V3.0 et antérieures ne prennent pas en charge la procédure stockée set_hg_anon_version. Si vous avez mis à niveau une instance disposant d'un masquage des données existant vers la version V3.1, exécutez l'instruction suivante pour activer les nouvelles fonctionnalités de la version V3.1. Dans le cas contraire, le système conserve l'ancien comportement de masquage des données.

    CALL hologres.set_hg_anon_version(2);
    Remarque
    • Si l'instruction s'exécute correctement, le comportement de masquage des données pour les versions V3.1 et ultérieures est activé.

    • Si l'exécution de l'instruction échoue et que le journal d'erreurs affiche "Error: not safe to upgrade to hg_anon version 2", l'activation de la fonctionnalité a échoué. Cela est dû au fait que le masquage des données est configuré pour des colonnes dont le type n'est pas TEXT, VARCHAR ou CHAR dans la base de données actuelle. Dans les versions V3.1 et ultérieures, les résultats du masquage des données ne sont pas conformes aux attentes et le comportement de masquage doit être corrigé.

Limites

  • Vous ne pouvez pas importer des données d'une table comportant des règles de masquage vers une table où aucune règle de masquage n'est définie. L'erreur suivante est renvoyée :

    ERROR: The insert table has not set SECURITY LABEL
  • Vous ne pouvez pas exécuter de requêtes UNION ou DISTINCT sur des tables comportant des règles de masquage. L'erreur suivante est renvoyée :

    ERROR: UNION is not support on security item
  • Le masquage des données peut affecter les performances des requêtes. L'impact varie selon la méthode de masquage et le volume de données. Les performances peuvent se dégrader de 10 % à 20 %, et davantage dans des cas extrêmes.

  • Vous ne pouvez pas définir de règles de masquage pour les tables étrangères.

Utiliser le masquage des données

Configurer les règles de masquage

Hologres vous permet de définir des règles de masquage des données pour des colonnes ou des utilisateurs spécifiques. Avant de configurer les règles de masquage, activez le paramètre GUC de masquage des données. Pour plus d'informations, consultez Prérequis.

  • Syntaxe

    • Définir une politique de masquage pour une colonne

      Pour masquer les données dans plusieurs colonnes, exécutez cette instruction pour chaque colonne.

      SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS <label_name>/'default_value';
    • Définir une politique de masquage pour un utilisateur

       SECURITY LABEL FOR hg_anon ON ROLE <user_name> IS '[<label_name>|all]:[masked|unmasked]';
  • Paramètres

    Paramètre

    Description

    hg_anon

    L'extension hg_anon fournit la fonctionnalité de masquage des données. Vous devez spécifier hg_anon comme fournisseur dans l'instruction SECURITY LABEL.

    tablename

    Nom de la table contenant la colonne à masquer.

    col_name

    Nom de la colonne à masquer.

    label_name

    Pour les fonctions de désensibilisation prédéfinies par le système, utilisez SHOW hg_anon_labels; pour afficher le label_name défini dans la base de données actuelle.

    user_name

    ID du compte. Vous pouvez le trouver sur la page Security Settings.

    masked|unmasked

    • masked : Utiliser le masquage des données.

    • unmasked : Ne pas utiliser le masquage des données.

    Le tableau suivant décrit les valeurs prédéfinies de label_name.

    Type de données

    label_name

    Politique de masquage

    Type de masquage

    Description

    Exemple

    TEXT

    name

    name

    mask

    Masque un nom.

    • Avant le masquage : Li Hua ; après le masquage : * Hua.

    • Avant le masquage : Wang Xiaoqiang ; après le masquage : ** Qiang.

    email

    email

    mask

    Masque une adresse e-mail.

    Avant le masquage : lihuang@alibaba.com ; après le masquage : lih***@alibaba.com.

    ip

    ip

    mask

    Masque une adresse IP.

    Avant le masquage : 1.2.3.4 ; après le masquage : 1...*.

    id

    id

    mask

    Masque un numéro de carte d'identité.

    Avant le masquage : 110345188812011234 ; après le masquage : 14.

    phone

    phone

    mask

    Masque un numéro de téléphone.

    Avant le masquage : 13900001234 ; après le masquage : ***1234.

    bank_id

    bank_id

    mask

    Masque un numéro de compte bancaire ou de carte de crédit.

    Avant le masquage : 2349867902834701928 ; après le masquage : *1928.

    hash

    md5

    hash

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

    Avant le masquage : Wenyi West Road, Hangzhou, Zhejiang ; après le masquage : dbf894b409d4a2ef17dfd9c7fdcafcd8.

    first_mask

    first_mask

    mask

    La règle first_mask n'affiche que le premier caractère.

    Avant le masquage : 123456789 ; après le masquage : 1****.

    INT, FLOAT et autres types numériques

    Default

    default_value

    default_value

    Masque les données avec une valeur par défaut.

    Remarque
    • Si le label_name spécifié n'existe pas lors de la configuration du masquage des données, le système utilise le masquage par valeur par défaut comme solution de secours.

    • Pris en charge uniquement dans Hologres V3.1 et versions ultérieures.

    Correspondances entre les types de données et leurs valeurs masquées par défaut :

    • TEXT/VARCHAR/CHAR : ***

    • BOOLEAN : false

    • INT8/INT4/INT2 : 0

    • TIMESTAMPTZ/TIMESTAMP : 2000-01-01 00:00:00

    • FLOAT8/FLOAT4/DECIMAL/NUMERIC : 0,0

    • MONEY : 0

    • DATE : 2000-01-01

    • TIME/TIMETZ : Heure actuelle

    • UUID : 00000000-0000-0000-0000-000000000000

Afficher les règles de masquage

  • Pour afficher les règles de masquage définies pour les colonnes :

    --View the masking rules set for columns
    SELECT c.relname, a.attname, provider, label
    FROM pg_seclabel s
    JOIN pg_class c ON s.objoid = c.oid
    JOIN pg_attribute a ON s.objoid = a.attrelid AND s.objsubid = a.attnum;
  • Pour afficher les règles de masquage définies pour les utilisateurs :

    --View the masking rules set for users
    SELECT
        usename,
        label
    FROM
        pg_shseclabel s
        INNER JOIN pg_catalog.pg_user u ON s.objoid = u.usesysid;

Personnaliser les règles de masquage

Si les règles de masquage des données existantes ne répondent pas à vos exigences, créez des règles personnalisées en modifiant le paramètre GUC hg_anon_lables.

  • Syntaxe

    -- label_name is a custom name, and method specifies a built-in Hologres function.
    ALTER DATABASE <db_name> SET hg_anon_labels = '[   
    {"label": <label_name1>, "method":<method1>},  
    {"label": <label_name2>, "method":<method2>}, 
    ...  ]'; 

    Après avoir exécuté la commande ALTER DATABASE, la connexion actuelle devient invalide. Établissez une nouvelle connexion. Utilisez la commande suivante pour vérifier si le paramètre a pris effet.

    SHOW hg_anon_enable;
  • Exemple

    ALTER DATABASE test_db SET hg_anon_labels = '[
    {"label":"ip", "method":{"desensType":"mask", "type":"ip"}},
    {"label":"email", "method":{"desensType":"mask", "type":"email"}},
    {"label":"name", "method":{"desensType":"mask", "type":"name"}},
    {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}},
    {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}}]';

    Paramètres :

    |
    **Élément**
    |
    **Description**
    |
    **Résultat d'exemple**
    | | --- | --- | --- | |
    {"desensType":"mask", "type":"ip"}
    |
    Masque une adresse IP.
    |
    192.*.*.*
    | |
    {"desensType":"mask", "type":"email"}
    |
    Masque une adresse e-mail.
    |
    abc***@example.net
    | |
    {"desensType":"mask", "type":"name"}
    |
    Masque un nom.
    |
    *Wu
    | |
    {"desensType":"hash", "type":"md5", "salt":""}
    |
    Masque les données à l'aide d'une fonction de hachage.
    |
    e086aa137fa19f67d27b39d0eca186103228f322c9c98a125554a24f875f0f7e
    | |
    {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}{"label":"last_mask", "method":{"desensType":"mask", "type":"user_define", "before":0, "after":1}}
    |
    Permet des modèles de masquage personnalisés, tels que la conservation d'un nombre spécifié de caractères au début ou à la fin d'une chaîne.
    |
    N/A
    |



































Exemples

Données d'exemple

Préparez une source de données. Vous pouvez également utiliser vos propres données métier.

--Create a database.
CREATE DATABASE hg_anon_demo;
--Create a sample data table.
DROP TABLE IF EXISTS personal_basic_information;
CREATE TABLE personal_basic_information  
(
    name TEXT
    ,email TEXT
    ,ip TEXT
    ,id TEXT 
    ,phone TEXT
    ,bank_id TEXT);
--Insert sample data.
INSERT INTO personal_basic_information(name,email,ip,id,phone,bank_id) VALUES 
('Zhang San','jiaxi***@alibaba-inc.com','127.0.0.1','142732199104050022','18157161223','4514610803067088'),
('Li Si','wb-hy583***@antgroup.com','127.0.0.1','510622198412248000','15757121834','6252470010027800'),
('Li Xiaoyao','wb-hy583***@antgroup.com','172.21.4.234','511025198812271696','18215451832','6252470010027800');

Définir une règle de masquage de colonne

--Create the hg_anon extension.
CREATE EXTENSION IF NOT EXISTS hg_anon;
--Enable data masking for the hg_anon_demo database.
ALTER DATABASE hg_anon_demo SET hg_anon_enable = on;
--Set the masking rule for each column.
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.name IS 'name';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.id IS 'id';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.phone IS 'phone';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.email IS 'email';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.bank_id IS 'bank_id';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.ip IS 'ip';

Dans une nouvelle connexion, exécutez la commande suivante pour afficher les résultats masqués.

SELECT * FROM personal_basic_information;

Le résultat suivant est renvoyé :

 name  |         email          |      ip      |         id         |    phone    |     bank_id      
-------+------------------------+--------------+--------------------+-------------+------------------
 * Si  | wb-***@antgroup.com    | 127.*.*.*    | 5****************0 | *********34 | ************7800
 ** Yao| wb-***@antgroup.com    | 172.**.*.*** | 5****************6 | *********32 | ************7800
 * San | jia***@alibaba-inc.com | 127.*.*.*    | 1****************2 | *********23 | ************7088
(3 rows)

Supprimer le masquage de colonne

SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.name IS null;
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.id IS null;

Exécutez la commande suivante pour afficher le résultat après la suppression des règles de masquage pour les colonnes.

SELECT name,id FROM personal_basic_information;

Le résultat suivant est renvoyé :

SELECT name,id FROM personal_basic_information;
  name  |         id         
--------+--------------------
 Li Si   | 510622198412248000
 Li Xiaoyao | 511025198812271696
 Zhang San   | 142732199104050022
(3 rows)

Supprimer le masquage utilisateur

--Cancel all masking rules for the user 'BASIC$test'.
SECURITY LABEL FOR hg_anon ON ROLE "BASIC$test" IS 'all:unmasked';

Exécutez la commande suivante pour afficher le résultat après la suppression de la règle de masquage pour l'utilisateur.

SELECT * FROM personal_basic_information;

Le résultat suivant est renvoyé :

  name  |          email           |      ip      |         id         |    phone    |     bank_id      
--------+--------------------------+--------------+--------------------+-------------+------------------
 Li Si   | wb-hy583***@antgroup.com | 127.0.0.1    | 510622198412248000 | 15757121834 | 6252470010027800
 Li Xiaoyao | wb-hy583***@antgroup.com | 172.21.4.234 | 511025198812271696 | 18215451832 | 6252470010027800
 Zhang San   | jiaxi***@alibaba-inc.com | 127.0.0.1    | 142732199104050022 | 18157161223 | 4514610803067088
(3 rows)

Définir le masquage sur une colonne JOIN

--Example of setting masking for a JOIN column
CREATE TABLE tbl1 (
    id text
);
INSERT INTO tbl1
    VALUES ('142732199102290022');
--The id column of the personal_basic_information table is already masked.
SELECT * FROM personal_basic_information a JOIN tbl1 b ON a.id = b.id;

Le résultat suivant est renvoyé :

name | email | ip | id | phone | bank_id | id 
------+-------+----+----+-------+---------+----
(0 rows)

Utilisation de Data Security Guard

En plus de configurer manuellement les règles de masquage, vous pouvez utiliser Data Security Guard pour automatiser le masquage des données.

  • Limites

    • Seules les versions Hologres V1.1 et ultérieures prennent en charge l'utilisation de Data Security Guard pour le masquage des données.

      Remarque

      Si la version de votre instance est antérieure à la V1.1, consultez Résolution des erreurs de préparation de la mise à niveau ou rejoignez le groupe DingTalk Hologres pour obtenir de l'assistance. Pour plus d'informations, consultez Comment obtenir plus d'assistance en ligne ?.

    • Pour permettre la détection des données sensibles, Data Security Guard ne masque pas les données pour le compte racine.

    • Data Security Guard échantillonne les données à 09:00:00 (UTC+8) chaque jour pour identifier les données sensibles et définir des règles de masquage pour les colonnes qui en contiennent.

    • Vous pouvez utiliser Data Security Guard pour masquer les données dans Hologres dans les régions suivantes : Chine (Pékin), Chine (Zhangjiakou), Chine (Shanghai), Chine (Hangzhou), Chine (Shenzhen), Chine (Hong Kong), Singapour, Allemagne (Francfort), Malaisie (Kuala Lumpur), Indonésie (Jakarta) et États-Unis (Silicon Valley).

  • Procédure

    • Activez la fonctionnalité de masquage des données.

      Le masquage des données est désactivé par défaut. Un superutilisateur doit exécuter les commandes suivantes dans la base de données cible pour l'activer.

      --Install the data masking EXTENSION.
      CREATE EXTENSION IF NOT EXISTS hg_anon;
      --Enable data masking for the specified database. It is disabled by default.
      ALTER DATABASE <db_name> SET hg_anon_enable = on;  

      db_name correspond à la base de données pour laquelle vous souhaitez activer le masquage des données.

      Important
      • hg_anon_enable est un paramètre GUC. Après avoir exécuté la commande ALTER DATABASE, la modification ne prend pas effet pour la connexion actuelle.

      • Exécutez l'instruction SQL suivante pour vérifier si le paramètre a pris effet.

        SHOW hg_anon_enable;
    • Configurez la base de données pour le masquage.

      1. Connectez-vous à la console Data Security Guard. Pour plus d'informations, consultez Accéder à la page Data Security Guard.

      2. Dans le volet de navigation de gauche, cliquez sur Rule Configurations > Data Identification Rule pour accéder à la page Data Identification Rule.

      3. Sur la page Sensitive Data Identification, créez une règle d'identification des données. Pour plus d'informations, consultez Règles d'identification des données.

      4. Dans le volet de navigation de gauche, cliquez sur Data Masking Management pour accéder à la page Data Masking Management.

      5. Dans la liste déroulante Masking Scenario, sélectionnez Hologres display masking (hologres_display_desense_code), puis cliquez sur Select Database for Masking à droite.

      6. Dans la boîte de dialogue Authorize Account for Masking, sélectionnez une base de données dans la liste Unmasked Databases et déplacez-la vers la liste Masked Databases. Cochez la case I agree to authorize Data Security Guard to mask this database, puis cliquez sur OK.

      7. Sur la page Data Masking Management, cliquez sur Create Masking Rule en haut à droite. Pour plus d'informations, consultez Gestion du masquage des données. Le système applique ensuite le masquage à la base de données spécifiée.

FAQ

Les données ne sont pas masquées ?

  • Symptôme : Vous suivez les étapes de l'exemple, mais les résultats de la requête ne sont pas masqués.

  • Causes possibles :

    • Une règle est définie pour désactiver le masquage pour certains utilisateurs.

    • Les étiquettes de masquage ne sont pas configurées.

  • Solution :

    • Exécutez la commande SQL suivante pour vérifier l'existence de règles de démasquage spécifiques aux utilisateurs.

      SELECT
        usename,
        label
      FROM pg_shseclabel s
      INNER JOIN pg_catalog.pg_user u on s.objoid = u.usesysid;

      Par défaut, cette requête renvoie un résultat vide, ce qui signifie que le masquage des données s'applique à tous les utilisateurs. Si le résultat n'est pas vide, activez le masquage pour les utilisateurs répertoriés.

    • Exécutez l'instruction SQL suivante pour vérifier les étiquettes de masquage configurées.

      SHOW hg_anon_labels;

      Si le résultat n'inclut pas d'étiquettes telles que ip, exécutez la commande SQL suivante pour les définir.

      ALTER DATABASE compress_test SET hg_anon_labels = '[
      {"label":"ip", "method":{"desensType":"mask", "type":"ip"}},
      {"label":"email", "method":{"desensType":"mask", "type":"email"}},
      {"label":"name", "method":{"desensType":"mask", "type":"name"}},
      {"label":"id", "method":{"desensType":"mask", "type":"id"}},
      {"label":"phone", "method":{"desensType":"mask", "type":"phone"}},
      {"label":"bank_id", "method":{"desensType":"mask", "type":"bank_id"}},
      {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}},
      {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}
      ]';

      Pour plus d'informations sur les règles correspondant à ces étiquettes, consultez Valeurs label_name prédéfinies.