- politique de masquage (ClickHouse Cloud, 25.12+) : masquage dynamique natif appliqué à l’exécution des requêtes pour des utilisateurs/rôles spécifiques
- fonction de remplacement de chaînes : masquage simple à l’aide de fonctions intégrées
- VIEW masqué : création de vues avec une logique de transformation
- colonne matérialisée : stockage de versions masquées en parallèle des données d’origine
- règle de masquage des requêtes : masquage des données sensibles dans les logs (ClickHouse OSS)
Utiliser les politiques de masquage (ClickHouse Cloud)
Les politiques de masquage sont disponibles dans ClickHouse Cloud à partir de la version 25.12.
CREATE MASKING POLICY offre un moyen natif de masquer dynamiquement les valeurs de colonnes pour des utilisateurs ou rôles spécifiques au moment de l’exécution de la requête. Contrairement à d’autres approches, les politiques de masquage n’exigent ni la création de vues distinctes ni le stockage de données masquées : la transformation s’applique de manière transparente lorsque les utilisateurs interrogent la table.
Politique de masquage de base
orders contenant des informations client :
masked_data_viewer :
masked_data_viewer interroge la table orders, il voit automatiquement des données masquées :
Query
Response (for masked_data_viewer role)
masked_data_viewer voient les données d’origine non masquées.
Masquage conditionnel
WHERE pour appliquer le masquage uniquement à certaines lignes. Par exemple, pour masquer uniquement les commandes d’un montant élevé :
Plusieurs politiques avec priorité
PRIORITY pour déterminer quelle transformation sera appliquée. Les valeurs de priorité les plus élevées sont appliquées en dernier :
total_amount > 100, la politique refined_masking (priorité 10) prend le pas sur la politique basic_masking (priorité 0) pour la colonne name, tandis que email continue d’utiliser le masquage de base.
Masquage basé sur le hachage
Gérer les politiques de masquage
Utiliser les fonctions de remplacement de chaînes
replace offre un moyen pratique de masquer les données :
Par exemple, vous pouvez remplacer le nom “John Smith” par un espace réservé
[CUSTOMER_NAME] à l’aide de la fonction replaceOne :
Query
Response
replaceRegexpOne pour remplacer n’importe quel nom de client :
Query
Response
replaceRegexpAll.
Query
\3 sert à insérer le troisième groupe de capture dans la chaîne résultante, ce qui produit :
Response
Créer des VIEWs masquées
VIEW peut être utilisée avec les fonctions sur les chaînes de caractères mentionnées ci-dessus pour appliquer des transformations aux colonnes contenant des données sensibles avant qu’elles ne soient présentées à l’utilisateur.
Ainsi, les données d’origine restent inchangées, et les utilisateurs qui interrogent la vue ne voient que les données masquées.
Pour l’illustrer, imaginons que nous disposions d’une table stockant des enregistrements de commandes clients.
Nous voulons nous assurer qu’un groupe d’employés puisse consulter ces informations, sans pour autant leur donner accès à l’intégralité des informations sur les clients.
Exécutez la requête ci-dessous pour créer une table d’exemple orders et y insérer quelques enregistrements fictifs de commandes clients :
masked_orders :
SELECT de la requête de création de la vue ci-dessus, nous définissons des transformations à l’aide de replaceRegexpOne sur les champs name, email, phone et shipping_address, qui contiennent des informations sensibles que nous souhaitons masquer partiellement.
Sélectionnez les données de la vue :
Query
Response
SELECT sur la vue :
SELECT sur la table de base, quel que soit le rôle concerné.
Il est donc plus sûr de révoquer explicitement l’accès à la table de base :
masked_orders_viewer ne peuvent voir
que les données masquées de la vue, et non les données d’origine non masquées de la table.
Utiliser des colonnes MATERIALIZED et des restrictions d’accès au niveau des colonnes
VIEW distincte pour les données masquées, nous allons maintenant créer des colonnes masquées à l’aide de MATERIALIZED :
SELECT suivante, vous verrez que les données masquées sont ‘matérialisées’ au moment de l’insertion et stockées avec les données d’origine non masquées.
Il est nécessaire de sélectionner explicitement les colonnes masquées, car ClickHouse n’inclut pas automatiquement les colonnes matérialisées dans les requêtes SELECT * par défaut.
Query
Response
orders.
Recréez le rôle que nous avons créé précédemment :
SELECT sur la table orders :
orders,
vous pouvez marquer les colonnes sensibles non masquées comme EPHEMERAL,
ce qui garantit que les colonnes de ce type ne sont pas stockées dans la table.
Query
Response
Utiliser les règles de masquage des requêtes pour les données de journalisation
system.query_log, system.text_log et system.processes).
Cela permet uniquement d’éviter que des données sensibles ne se retrouvent dans les logs.
Notez que cela ne masque pas les données dans les résultats de requête.
Par exemple, pour masquer un numéro de sécurité sociale, vous pouvez ajouter la règle suivante à votre configuration du serveur :