Was macht dieses Tool?
pg_gdpr_audit durchsucht alle Schemas der Datenbank nach Spalten, die personenbezogene Daten (PII) enthalten könnten. Es erkennt gängige Muster wie email, phone, date_of_birth, first_name und klassifiziert sie nach Sensitivitätsstufe. Das Ergebnis ist ein vollständiger Bericht aller potenziellen DSGVO-relevanten Spalten — inklusive der Information, ob sie verschlüsselt oder maskiert sind.
Wie wird es aufgerufen?
Claude CLI (natürliche Sprache)
▶ Calling tools...
→ pg_connect { "profile": "production-db" }
✓ Verbunden mit production-db (PostgreSQL 16.x)
→ pg_gdpr_audit {}
DSGVO-Audit abgeschlossen. 3 Schemas gescannt, 26 PII-Spalten gefunden:
⚠ ecommerce.customers — 6 PII-Spalten
email (text) — Level 3 — AES-256 erforderlich
first_name (text) — Level 3 — AES-256 erforderlich
last_name (text) — Level 3 — AES-256 erforderlich
phone (text) — Level 3 — AES-256 erforderlich
shipping_address (jsonb) — Level 2 — Zugriffs-Logging
billing_address (jsonb) — Level 2 — Zugriffs-Logging
⚠ healthcare.patients — 5 PII-Spalten
first_name (text) — Level 3 — AES-256 erforderlich
last_name (text) — Level 3 — AES-256 erforderlich
email (text) — Level 3 — AES-256 erforderlich
phone_number (text) — Level 3 — AES-256 erforderlich
date_of_birth (date) — Level 3 — AES-256 erforderlich
Empfehlung: 26 PII-Spalten erfordern sofortige Maßnahmen (9x Level 3, 2x Level 2).
MCP Protocol (programmatisch)
const result = await client.callTool("pg_connect", { "profile": "production-db" });
// Response:
{ "status": "connected", "version": "PostgreSQL 16.x" }
const result = await client.callTool("pg_gdpr_audit", {});
// Response:
{
"pii_columns_found": 26,
"pii_columns": [
{
"schema": "ecommerce",
"table": "customers",
"column": "email",
"data_type": "text",
"pii_type": "email",
"pii_level": 3,
"recommendation": "Requires AES-256 encryption"
},
{
"schema": "ecommerce",
"table": "customers",
"column": "first_name",
"data_type": "text",
"pii_type": "name",
"pii_level": 3,
"recommendation": "Requires AES-256 encryption"
},
{
"schema": "healthcare",
"table": "patients",
"column": "email",
"data_type": "text",
"pii_type": "email",
"pii_level": 3,
"recommendation": "Requires AES-256 encryption"
},
{
"schema": "healthcare",
"table": "patients",
"column": "date_of_birth",
"data_type": "date",
"pii_type": "dob",
"pii_level": 3,
"recommendation": "Requires AES-256 encryption"
}
]
}
Was passiert unter der Haube?
Das Tool durchsucht information_schema.columns mit Pattern-Matching auf bekannte PII-Spaltennamen:
SELECT table_schema, table_name, column_name, data_type FROM information_schema.columns WHERE table_schema NOT IN ('pg_catalog', 'information_schema') AND ( column_name ILIKE '%email%' OR column_name ILIKE '%phone%' OR column_name ILIKE '%birth%' OR column_name ILIKE '%first_name%' OR column_name ILIKE '%last_name%' OR column_name ILIKE '%address%' OR column_name ILIKE '%ssn%' OR column_name ILIKE '%passport%' OR column_name ILIKE '%national_id%' ) ORDER BY table_schema, table_name, column_name;
Zusätzlich prüft das Tool, ob PII-Spalten verschlüsselt sind. Es erkennt verschlüsselte Spalten anhand von Spalten-Kommentaren (z.B. COMMENT ON COLUMN ... IS 'encrypted:aes256') oder speziellen Datentypen wie bytea bei Spalten, die normalerweise varchar wären.
Ausgabe im Detail
- pii_columns_found — Gesamtanzahl erkannter PII-Spalten
- schema / table / column — Vollständiger Pfad zur PII-Spalte
- data_type — PostgreSQL-Datentyp der Spalte
- pii_type — Klassifizierung: email, name, phone, dob, address
- pii_level — Sensitivitätsstufe: 1 (niedrig), 2 (mittel), 3 (hoch)
- recommendation — Empfohlene Schutzmaßnahme (z.B. AES-256, Zugriffs-Logging)
Praxis-Tipp: Das Tool erkennt PII anhand von Spaltennamen — nicht anhand des Inhalts. Spalten wie metadata oder notes, die in JSON-Feldern PII enthalten könnten, werden nur erkannt, wenn eine Compliance-Policy-Datei mit benutzerdefinierten Mustern hinterlegt ist.
Was testet die Testsuite?
Die Testsuite validiert pg_gdpr_audit gegen eine PostgreSQL-Instanz mit einem healthcare.patients-Schema, das typische PII-Spalten enthält (date_of_birth, email, phone_number):
✓ pg_gdpr_audit > counts unprotected columns correctly
✓ pg_gdpr_audit > returns schemas_scanned count
Test Files 1 passed (1)
Tests 3 passed (3)
Duration 198ms
Testdaten-Szenario
Die Seed-Datenbank enthält:
- healthcare.patients — Patienten mit date_of_birth, email, phone_number, first_name, last_name (alles unverschlüsselt)
- app.users — User mit verschlüsseltem email-Feld (bytea + Kommentar)
- perf.transactions — Finanzdaten ohne PII-Spalten (Kontrollgruppe)
Die Tests validieren, dass:
- PII-Spalten im healthcare-Schema korrekt erkannt werden
- Die Anzahl ungeschützter Spalten (
unprotected_count) stimmt - Die Anzahl gescannter Schemas (
schemas_scanned) korrekt zurückgegeben wird
Zusammenfassung
pg_gdpr_audit macht aus dem manuellen Durchsuchen von Datenbank-Schemas nach PII eine automatisierte, wiederholbare Prüfung. Ideal als regelmäßiger Compliance-Check oder vor einem DSGVO-Audit.
In Kombination mit pg_permission_audit (→ Wer hat Zugriff auf PII?) bildet es den Kern des /pg-comply Workflow-Skills.