Anonymisierung von Daten in PostgreSQL für Testumgebungen: Mein Skript.

Anonymisierung von Daten in PostgreSQL für Testumgebungen: Mein Skript.

3 Min. Lesezeit

Ein Beitrag zum Thema: Anonymisierung von Daten in PostgreSQL für Testumgebungen: Mein Skript.

Anonymisierung von Daten in PostgreSQL: Echte Tests mit sicheren Daten

Für eine effektive Softwareentwicklung sind realitätsnahe Testdaten unerlässlich. Doch der Einsatz von echten Produktionsdaten in Entwicklungs- oder Testumgebungen ist nicht nur ein hohes Sicherheitsrisiko, sondern verstößt auch direkt gegen die DSGVO. Die Herausforderung besteht darin, die Daten so zu verändern, dass sie keinen Personenbezug mehr zulassen, aber ihre strukturelle Integrität und statistische Relevanz behalten. In diesem Beitrag zeige ich Ihnen mein Vorgehen und ein praktisches Skript zur Anonymisierung von PostgreSQL-Datenbanken.

1. Die Strategie: In-Place vs. ETL

Es gibt zwei Hauptansätze: Entweder man kopiert die Daten in eine gesicherte Umgebung und anonymisiert sie dort (“In-Place”), oder man anonymisiert sie während des Extraktionsprozesses (“Extract, Transform, Load”).

  • Mein Ansatz: Ich bevorzuge die In-Place-Anonymisierung in einer isolierten Staging-Umgebung. So wird verhindert, dass sensible Daten jemals den gesicherten Bereich der Produktion verlassen, bevor sie unkenntlich gemacht wurden.

2. Identifikation sensibler Felder

Bevor das Skript läuft, müssen wir definieren, was geschützt werden muss.

  • Direkte Identifikatoren: Namen, E-Mail-Adressen, Telefonnummern, SV-Nummern.
  • Indirekte Identifikatoren: Geburtsdaten in Kombination mit PLZ, die Rückschlüsse zulassen könnten.
  • Meine Praxis: Ich erstelle ein Mapping-File (YAML oder JSON), das Tabellen und Spalten definiert und die anzuwendende Anonymisierungs-Methode festlegt.

3. Das Anonymisierungs-Skript: SQL-Power nutzen

PostgreSQL bietet mächtige Funktionen, um Daten effizient zu transformieren. Hier ein Auszug aus meinem Standard-Skript:

-- Namen durch Zufalls-Strings ersetzen
UPDATE users SET 
  first_name = 'User_' || id,
  last_name = md5(random()::text),
  email = 'user_' || id || '@example.test';

-- Adressen verfälschen
UPDATE addresses SET 
  street = 'Teststraße ' || (random()*100)::int,
  city = 'Testhausen';

-- Passwörter zurücksetzen (für Login in Testumgebung)
UPDATE users SET password_hash = '$2a$12$test_hash_hier';

Für komplexere Daten nutze ich oft die Erweiterung faker (wenn verfügbar) oder schreibe kleine Go-Utilities, die über das API der Datenbank laufen und konsistentere Zufallsdaten generieren.

4. Konsistenz wahren (Referenzielle Integrität)

Die größte Schwierigkeit ist die Konsistenz über Tabellengrenzen hinweg. Wenn eine user_id in mehreren Tabellen vorkommt, muss sie überall gleich behandelt werden, damit die Anwendung logisch weiterfunktioniert.

  • Technik: Ich nutze stabile Hashing-Funktionen mit einem “Salt”. hash(id + salt) führt immer zum gleichen anonymen Ergebnis, was die referenzielle Integrität wahrt, ohne den Originalwert preiszugeben.

Fazit: Datenschutz durch Technik (Privacy by Design)

Automatisierte Anonymisierung ist ein Eckpfeiler moderner DevSecOps-Praktiken. Mit einem gut durchdachten Skript und einem klaren Mapping-Prozess lässt sich die Lücke zwischen Datenschutz-Compliance und effizientem Testing schließen. Echte Daten gehören in die Produktion – anonyme Daten in die Entwicklung.


Haben Sie Fragen zur sicheren Handhabung von Testdaten in Ihrem Unternehmen?
Ich helfe Ihnen bei der Implementierung von Anonymisierungs-Pipelines und der Absicherung Ihrer Testumgebungen. Kontaktieren Sie mich für ein Beratungsgespräch.

Interesse an einer Lösung?

Ich unterstütze Unternehmen und Verbände bei der digitalen Transformation. Erfahre mehr über meine Softwareentwicklung oder lass dich im Bereich DevSecOps beraten.

Beratungstermin vereinbaren