IBM Cloud Docs
Datenmaskierung mit PostgreSQL Anonymizer

Datenmaskierung mit PostgreSQL Anonymizer

Databases for PostgreSQL Anonymizer ist eine Erweiterung von PostgreSQL, mit der Daten anonymisiert werden können, indem persönlich identifizierbare und sensible Geschäftsinformationen in einer Databases for PostgreSQL Datenbank maskiert oder ersetzt werden.

Die Erweiterung unterstützt die folgenden Maskierungsstrategien, die jeweils für unterschiedliche Anwendungsfälle geeignet sind:

  • Statische Maskierung: Entfernen Sie die PII gemäß den Regeln.
  • Dynamische Maskierung: Ausblenden von PII nur für die maskierten Benutzer.
  • Anonyme Dumps: Exportieren Sie die maskierten Daten einfach in eine SQL-Datei.
  • Verallgemeinerung: Ersetzt spezifische Werte durch breitere, weniger präzise Kategorien oder Bereiche.

Statische Maskierung

Statische Maskierung ist eine Technik zur Anonymisierung von Daten, bei der sensible Informationen unwiderruflich durch synthetisch erzeugte Werte ersetzt werden, format-erhaltende Werte ersetzt. Dieses Verfahren gewährleistet die vollständige und dauerhafte Entfernung der Originaldaten und schließt damit die Möglichkeit die Möglichkeit einer erneuten Identifizierung oder Rekonstruktion. Weitere Informationen finden Sie unter Statische Maskierung.

Aktivieren der statischen Maskierung

  1. Installieren Sie die Anonymizer-Erweiterung.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Initialisieren Sie den Anonymisierer.

    select public.run_anon_init();
    
  3. Definieren Sie Maskierungsregeln.

    SECURITY LABEL FOR anon
      ON COLUMN <table_name>.<column_name>
      IS 'MASKED WITH FUNCTION anon.<masking_function>()';
    
  4. Überprüfen Sie die angewandten Maskierungsregeln.

    SELECT objoid::regclass, provider, label
    FROM pg_seclabel
    WHERE provider = 'anon' AND objoid = '<table_name>'::regclass;
    
  5. Wenden Sie die Regeln dauerhaft an. Mit dem folgenden Befehl werden die Originaldaten in der angegebenen Tabelle dauerhaft durch die maskierten Daten ersetzt.

    SELECT anon.anonymize_table('<table_name>');
    
  • Die statische Maskierung ist ein langsamer Prozess. Das Prinzip der statischen Maskierung besteht darin, alle Zeilen aller Tabellen zu aktualisieren, die mindestens eine maskierte Spalte enthalten. Das bedeutet, dass PostgreSQL alle Daten auf der Festplatte neu schreiben wird. Je nach Größe der Datenbank, der Hardware und der Instanzkonfiguration kann es schneller sein, die anonymisierten Daten zu exportieren und wieder in die Datenbank zu laden.

  • Um die Maskierung auf neu eingefügte Zeilen in einer Tabelle anzuwenden, führen Sie den folgenden Befehl aus.

    SELECT anon.anonymize_table('<table_name>');
    

    Dieser Befehl stellt sicher, dass alle neuen Daten, die der Tabelle hinzugefügt werden, gemäß den konfigurierten Anonymisierungsregeln maskiert werden.

Dynamische Maskierung

Die dynamische Maskierung ermöglicht es dem Datenbankbesitzer, sensible Daten für bestimmte Benutzer zu verbergen, während er autorisierten Benutzern den Zugriff auf die ursprünglichen, unmaskierten Werte und deren Änderung gestattet. Weitere Informationen finden Sie unter Dynamische Maskierung.

Aktivieren der dynamischen Maskierung

  1. Installieren Sie die Anonymizer-Erweiterung.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Initialisieren Sie den Anonymisierer.

    select public.run_anon_init();
    
  3. Aktivieren Sie das dynamische Maskierungsmodul.

    show anon.transparent_dynamic_masking;
    
    select public.enable_dynamic_masking ('<database_name>');
    

    Starten Sie Ihre Sitzung neu, wenn anon.transparent_dynamic_masking als ausgeschaltet angezeigt wird.

  4. Erstellen Sie die Rolle für den maskierten Zugriff.

    CREATE ROLE <role_name> LOGIN;
    
  5. Markieren Sie die Rolle als maskierten Benutzer.

      SECURITY LABEL FOR anon ON ROLE <role_name> IS 'MASKED';
    
  6. Erteilung von Berechtigungen für die Maskierungstabelle an eine Rolle.

      grant select on <schema_name>.<table_name> to <role_name> ;
    
  7. Deklarieren Sie die Maskierungsregeln.

    SECURITY LABEL FOR anon
      ON COLUMN <table_name>.<column_name>
      IS 'MASKED WITH FUNCTION anon.<masking_function>()';
    
  8. Überprüfen Sie die Maskierungsregeln.

    SELECT objoid::regclass, provider, label
    FROM pg_seclabel
    WHERE provider = 'anon' AND objoid = '<table_name>'::regclass;
    
  9. Stellen Sie mit der maskierten Rolle eine Verbindung zur Datenbank her, und fragen Sie die Tabelle ab. Sie sollten die maskierten Daten gemäß den definierten Regeln sehen.

select * from <table_name>;

Hinweise:

  • Der Anonymisierer maskiert die Daten je nach Abfrager.
  • Maskierten Rollen sollte es nicht gestattet sein, Daten einzufügen, zu aktualisieren oder zu löschen.
  • Sie können Tabellen in mehreren Schemata maskieren.
  • Eine Maskierungsregel kann die Datenintegrität beeinträchtigen. Sie können zum Beispiel eine Spalte mit einer UNIQUE-Beschränkung mit dem Wert NULL maskieren. Es liegt an Ihnen zu entscheiden, ob die Maskenbenutzer Datenintegrität benötigen oder nicht.
  • Maskierte Rollen dürfen EXPLAIN nicht verwenden.

Anonyme Abfälle

Ein anonymer Dump bezieht sich auf den Export einer Datenbank, die anstelle der ursprünglichen sensiblen Werte anonymisierte oder de-identifizierte Daten enthält. Dies geschieht in der Regel, um Daten sicher auszutauschen, zu migrieren oder zu analysieren, ohne ohne persönlich identifizierbare Informationen (PII) oder sensible Attribute preiszugeben. Weitere Informationen finden Sie unter Anonyme Dumps.

Aktivieren von anonymen Dumps

  1. Installieren Sie die Anonymizer-Erweiterung.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Initialisieren Sie den Anonymisierer.

    select public.run_anon_init();
    
  3. Erstellen Sie ein eigenes Schema für benutzerdefinierte Maskierungsfunktionen.

     CREATE SCHEMA IF NOT EXISTS <schema_name>;
    
  4. Erstellen Sie eine Rolle für den Export von maskierten Daten.

     CREATE ROLE <role_name> LOGIN PASSWORD '<enter_password>';
    
  5. Aktivieren Sie die Maskierung für die Rolle.

    select  public.enable_masking_for_dump('<role_name>','<schema_name>');
    
  6. Definieren Sie eine benutzerdefinierte Maskierungsfunktion, wie im folgenden Beispiel.

    CREATE OR REPLACE FUNCTION <schema_name>.remove_content(j JSONB)
    RETURNS JSONB
    AS $func$
      SELECT j - ARRAY['content']
    $func$
    LANGUAGE SQL;
    
  7. Erstellen Sie eine Maskierungsregel.

    SECURITY LABEL FOR anon
      ON COLUMN <table_name>.<column_name>
      IS 'MASKED WITH FUNCTION <schema_name>.<custom_masking_function>()';
    
  8. Kennzeichnen Sie die Rolle als maskierte Rolle.

    SECURITY LABEL FOR anon ON ROLE <schema_name> IS 'MASKED';
    
  9. Zugriff auf das maskierte Schema gewähren.

    GRANT USAGE ON SCHEMA <schema_name> TO <masked_role>;
    
  10. Gewähren Sie Select-Zugriff auf maskierte Tabellen.

grant select ON <schema_name>.<table_name> to <masked_role>;
  1. Exportieren Sie maskierte Daten mit pg_dump als maskierte Rolle.

Weitere Informationen finden Sie unter pg dump commands.

Um maskierte Daten zu exportieren, führen Sie pg_dump mit der Rolle masked aus. Wenn pg_dump von einem Admin-Benutzer ausgeführt wird, werden die Daten ohne Maskierung exportiert.

Verallgemeinerung

Die Hauptidee der Verallgemeinerung besteht darin, die ursprünglichen Daten zu verwischen. Weitere Informationen finden Sie unter Generalisierung.

Ermöglichung der Verallgemeinerung

  1. Installieren Sie die Anonymisierungserweiterung.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Initialisieren Sie den Anonymisierer.

    select public.run_anon_init();
    
  3. Erstellen Sie eine Ansicht mit Generalisierungsfunktionen.

    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>;
    
  4. Indirekte Bezeichner deklarieren.

    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';
    
  5. Zugang zu k-anonymity gewähren.

    select public.k_anonymity();
    
  6. Führen Sie die k-Anonymitätsprüfung für die Ansicht oder Tabelle durch.

    SELECT anon.k_anonymity('<view_name/table_name>');
    

Eine Rolle demaskieren

Verwenden Sie den folgenden Befehl, um eine Rolle zu demaskieren.

SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL;

Maskierungsregel deaktivieren

Verwenden Sie den folgenden Befehl, um die Maskierungsfunktion zu deaktivieren.

SECURITY LABEL FOR anon
  ON COLUMN <table_name>.<column_name>
  IS NULL;