Masquage des données à l'aide de PostgreSQL Anonymizer
Databases for PostgreSQL Anonymizer est une extension de PostgreSQL conçue pour rendre les données anonymes en masquant ou en remplaçant les informations commerciales sensibles et personnellement identifiables dans une base de données Databases for PostgreSQL.
L'extension prend en charge les stratégies de masquage suivantes, chacune convenant à des cas d'utilisation différents :
- Masquage statique: Supprimer les IIP conformément aux règles.
- Masquage dynamique: masquer les IPI uniquement pour les utilisateurs masqués.
- Dumps anonymes: Il suffit d'exporter les données masquées dans un fichier SQL.
- Généralisation: Remplace les valeurs spécifiques par des catégories ou une gamme plus larges et moins précises.
Masquage statique
Le masquage statique est une technique d'anonymisation des données qui remplace de manière irréversible les informations sensibles par des valeurs générées synthétiquement, générées synthétiquement et préservant le format. Ce processus garantit la suppression complète et permanente des données d'origine, éliminant ainsi la possibilité de ré-identification ou de reconstruction la possibilité d'une réidentification ou d'une reconstruction. Pour plus d'informations, voir Masquage statique.
Activation du masquage statique
-
Installer l'extension Anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Initialiser l'anonymiseur.
select public.run_anon_init(); -
Définir les règles de masquage.
SECURITY LABEL FOR anon ON COLUMN <table_name>.<column_name> IS 'MASKED WITH FUNCTION anon.<masking_function>()'; -
Vérifiez les règles de masquage appliquées.
SELECT objoid::regclass, provider, label FROM pg_seclabel WHERE provider = 'anon' AND objoid = '<table_name>'::regclass; -
Appliquer les règles de façon permanente. La commande ci-dessous remplace de façon permanente les données originales du tableau spécifié par les données masquées.
SELECT anon.anonymize_table('<table_name>');
-
Le masquage statique est un processus lent. Le principe du masquage statique est de mettre à jour toutes les lignes de toutes les tables contenant au moins une colonne masquée. Cela signifie que PostgreSQL réécrira toutes les données sur le disque. En fonction de la taille de la base de données, du matériel et de la configuration de l'instance, il peut être plus rapide d'exporter les données anonymisées et de les recharger dans la base de données.
-
Pour appliquer le masquage aux lignes nouvellement insérées dans un tableau, exécutez la commande suivante.
SELECT anon.anonymize_table('<table_name>');Cette commande garantit que toute nouvelle donnée ajoutée à la table est masquée conformément aux règles d'anonymisation configurées.
Masquage dynamique
Le masquage dynamique permet au propriétaire de la base de données de masquer les données sensibles pour des utilisateurs spécifiques, tout en permettant aux utilisateurs autorisés d'accéder aux valeurs originales non masquées et de les modifier. Pour plus d'informations, voir Masquage dynamique.
Activation du masquage dynamique
-
Installer l'extension Anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Initialiser l'anonymiseur.
select public.run_anon_init(); -
Activer le moteur de masquage dynamique.
show anon.transparent_dynamic_masking; select public.enable_dynamic_masking ('<database_name>');Redémarrez votre session si anon.transparent_dynamic_masking est désactivé.
-
Créer le rôle pour l'accès masqué.
CREATE ROLE <role_name> LOGIN; -
Marquer le rôle en tant qu'utilisateur masqué.
SECURITY LABEL FOR anon ON ROLE <role_name> IS 'MASKED'; -
Accorder des autorisations sur la table de masquage à un rôle.
grant select on <schema_name>.<table_name> to <role_name> ; -
Déclarer les règles de masquage.
SECURITY LABEL FOR anon ON COLUMN <table_name>.<column_name> IS 'MASKED WITH FUNCTION anon.<masking_function>()'; -
Vérifier les règles de masquage.
SELECT objoid::regclass, provider, label FROM pg_seclabel WHERE provider = 'anon' AND objoid = '<table_name>'::regclass; -
Connectez-vous à la base de données en utilisant le rôle masqué et interrogez la table. Vous devriez voir les données masquées selon les règles définies.
select * from <table_name>;
Remarques :
- L'anonymiseur masque les données en fonction de l'auteur de la requête.
- Les rôles masqués ne doivent pas être autorisés à insérer, mettre à jour ou supprimer des données.
- Vous pouvez masquer une table dans plusieurs schémas.
- Une règle de masquage peut rompre l'intégrité des données. Par exemple, vous pouvez masquer une colonne ayant une contrainte UNIQUE avec la valeur NULL. C'est à vous de décider si les utilisateurs du masque ont besoin ou non de l'intégrité des données.
- Les rôles masqués ne sont pas autorisés à utiliser EXPLAIN.
Décharges anonymes
Une vidange anonyme est le processus d'exportation d'une base de données qui contient des données anonymes ou dépersonnalisées, plutôt que les valeurs sensibles d'origine. Il s'agit généralement de partager, de migrer ou d'analyser des données en toute sécurité sans exposer des informations personnelles identifiables (PII) ou des attributs sensibles sans exposer des informations personnelles identifiables (PII) ou des attributs sensibles. Pour plus d'informations, voir Dumps anonymes.
Activation des vidages anonymes
-
Installer l'extension Anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Initialiser l'anonymiseur.
select public.run_anon_init(); -
Créer un schéma spécifique pour les fonctions de masquage personnalisées.
CREATE SCHEMA IF NOT EXISTS <schema_name>; -
Créer un rôle pour l'exportation de données masquées.
CREATE ROLE <role_name> LOGIN PASSWORD '<enter_password>'; -
Activer le masquage pour le rôle.
select public.enable_masking_for_dump('<role_name>','<schema_name>'); -
Définissez une fonction de masquage personnalisée, comme dans l'exemple suivant.
CREATE OR REPLACE FUNCTION <schema_name>.remove_content(j JSONB) RETURNS JSONB AS $func$ SELECT j - ARRAY['content'] $func$ LANGUAGE SQL; -
Créer une règle de masquage.
SECURITY LABEL FOR anon ON COLUMN <table_name>.<column_name> IS 'MASKED WITH FUNCTION <schema_name>.<custom_masking_function>()'; -
Identifiez le rôle comme étant un rôle masqué.
SECURITY LABEL FOR anon ON ROLE <schema_name> IS 'MASKED'; -
Accorder l'accès au schéma masqué.
GRANT USAGE ON SCHEMA <schema_name> TO <masked_role>; -
Accorder l'accès Select sur les tables masquées.
grant select ON <schema_name>.<table_name> to <masked_role>;
- Exporter des données masquées en utilisant pg_dump comme rôle masqué.
Pour plus d'informations, voir les commandes pg dump.
Pour exporter des données masquées, exécutez pg_dump en utilisant le rôle masqué. Si pg_dump est exécuté par un utilisateur admin, les données seront exportées sans masquage.
Généralisation
L'idée principale de la généralisation est de brouiller les données originales. Pour plus d'informations, voir Généralisation.
Permettre la généralisation
-
Installer l'extension anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Initialiser l'anonymiseur.
select public.run_anon_init(); -
Créer une vue à l'aide de fonctions de généralisation.
CREATE MATERIALIZED VIEW <view_name> AS SELECT anon.generalize_daterange(<date_column_1>, 'month') AS <generalized_date_1>, anon.generalize_daterange(<date_column_2>, 'month') AS <generalized_date_2> FROM <source_table>; -
Déclarer les identifiants indirects.
SECURITY LABEL FOR k_anonymity ON COLUMN <view_name>.<generalized_date_1> IS 'INDIRECT IDENTIFIER'; SECURITY LABEL FOR k_anonymity ON COLUMN <view_name>.<generalized_date_2> IS 'INDIRECT IDENTIFIER'; -
Accorder l'accès au k-anonymat.
select public.k_anonymity(); -
Exécutez le contrôle d'anonymat k sur la vue ou le tableau.
SELECT anon.k_anonymity('<view_name/table_name>');
Démasquer un rôle
Utilisez la commande suivante pour démasquer un rôle.
SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL;
Désactiver la règle de masquage
Utilisez la commande suivante pour désactiver le rôle de masquage.
SECURITY LABEL FOR anon
ON COLUMN <table_name>.<column_name>
IS NULL;