← Zurück zum Blog
Audit

pg_gdpr_audit — Personenbezogene Daten in PostgreSQL aufspüren

ITUNIFIED • 2026-03-25 • 8 min Lesezeit

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)

● ● ●   Claude CLI — DSGVO-Audit
claude> Gibt es ungeschützte personenbezogene Daten in meiner Datenbank?

▶ 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)

● ● ●   MCP Protocol — Verbindung
// Programmatic invocation via MCP SDK
const result = await client.callTool("pg_connect", { "profile": "production-db" });

// Response:
{ "status": "connected", "version": "PostgreSQL 16.x" }
● ● ●   MCP Protocol — DSGVO-Audit
// Programmatic invocation via MCP SDK
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:

-- PII-Spalten-Erkennung via information_schema.columns
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):

● ● ●   vitest run — Testsuite
✓ pg_gdpr_audit > detects PII columns in healthcare schema
✓ 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:

  1. PII-Spalten im healthcare-Schema korrekt erkannt werden
  2. Die Anzahl ungeschützter Spalten (unprotected_count) stimmt
  3. Die Anzahl gescannter Schemas (schemas_scanned) korrekt zurückgegeben wird

Zusammenfassung

information_schema
Datenquelle
6
Ausgabefelder
3
Tests
read-only
Typ

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.

#postgresql#audit#gdpr#compliance#pii#mcp

Bereit, PostgreSQL-Betrieb zu automatisieren?

Starten Sie mit dem Open-Source-Server oder kontaktieren Sie uns für die Enterprise-Plattform.