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 |
|
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 |
|
|
|
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);RemarqueSi 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
UNIONouDISTINCTsur 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 lelabel_namedé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_maskn'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_namespé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.
RemarqueSi 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.
Importanthg_anon_enableest 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.
Connectez-vous à la console Data Security Guard. Pour plus d'informations, consultez Accéder à la page Data Security Guard.
Dans le volet de navigation de gauche, cliquez sur pour accéder à la page Data Identification Rule.
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.
Dans le volet de navigation de gauche, cliquez sur Data Masking Management pour accéder à la page Data Masking Management.
Dans la liste déroulante Masking Scenario, sélectionnez Hologres display masking (hologres_display_desense_code), puis cliquez sur Select Database for Masking à droite.
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.
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.
-