Tous les produits
Search
Centre de documentation

Hologres:Data masking

Dernière mise à jour :Sep 18, 2026

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

Contexte

L'adoption généralisée des technologies du big data, telles que le cloud computing et l'IA, libère une valeur sans précédent des données. Cependant, cela crée également des défis majeurs pour la 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. Au moment de la requête, les données sont masquées conformément à ces règles, ce qui empêche l'exposition non autorisée d'informations sensibles. Vous pouvez ainsi partager et analyser les données en toute sécurité tout en garantissant que les informations privées restent non identifiables.

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 de la version 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 configurée pour utiliser 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 les versions de la V3.0.1 à la V3.0.19 :

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

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

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

    Les modes Fixed FE et FE interdisent tous deux la consommation des journaux binaires. Pour consommer les journaux binaires, vous devez désactiver 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 est déterminé par 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, vous pouvez revenir au comportement de la version V3.0 en exécutant l'instruction suivante :

    CALL hologres.set_hg_anon_version(1);
  • Les instances de version 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 avec 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. Sinon, 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 avec succès, le comportement de masquage des données pour la version 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 de types autres que 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é.

Limitations

  • Vous ne pouvez pas importer de données d'une table avec 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 les 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, vous devez activer 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 de plusieurs colonnes, vous devez exécuter 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 masquage : Li Hua ; Après masquage : * Hua.

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

    email

    email

    mask

    Masque une adresse e-mail.

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

    ip

    ip

    mask

    Masque une adresse IP.

    Avant masquage : 1.2.3.4 ; Après masquage : 1...*.

    id

    id

    mask

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

    Avant masquage : 110345188812011234 ; Après masquage : 14.

    phone

    phone

    mask

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

    Avant masquage : 13900001234 ; Après masquage : ***1234.

    bank_id

    bank_id

    mask

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

    Avant masquage : 2349867902834701928 ; Après masquage : *1928.

    hash

    md5

    hash

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

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

    first_mask

    first_mask

    mask

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

    Avant masquage : 123456789 ; Après 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 repli.

    • 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

Consulter les règles de masquage

  • Pour consulter 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 consulter 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 besoins, vous pouvez créer 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 l'exécution de la commande ALTER DATABASE, la connexion actuelle devient invalide. Vous devez établir une nouvelle connexion. Utilisez la commande suivante pour vérifier si le paramètre a bien été pris en compte.

    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 de définir des modèles de masquage personnalisés, par exemple en conservant 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 des 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

Outre la configuration manuelle des règles de masquage, vous pouvez également 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 Dépannage des erreurs de préparation de mise à niveau ou rejoignez le groupe DingTalk Hologres pour obtenir de l'assistance. Pour plus d'informations, consultez Comment obtenir davantage d'assistance en ligne ?.

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

    • Data Security Guard échantillonne les données tous les jours à 09:00:00 (UTC+8) 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 l'exécution de la commande ALTER DATABASE, la modification n'est pas prise en compte pour la connexion actuelle.

      • Vous pouvez exécuter l'instruction SQL suivante pour vérifier si le paramètre a bien été pris en compte.

        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 libellés de masquage ne sont pas configurés.

  • Solution :

    • Exécutez la commande SQL suivante pour vérifier s'il existe des règles de non-masquage spécifiques à certains 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, vous devez activer le masquage pour les utilisateurs répertoriés.

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

      SHOW hg_anon_labels;

      Si le résultat n'inclut pas de libellés tels 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 libellés, consultez Valeurs label_name prédéfinies.