Konfiguration
Response-Validierungsregeln in policy.yaml:
# policy.yaml
response_rules:
- query: "get_user_by_id"
max_rows: 1
mask_columns:
- column: "ssn"
mask: "XXX-XX-####" # Letzte 4 Ziffern sichtbar
- column: "email"
mask: "****@****.***" # Vollständig maskiert
- column: "phone"
mask: "+49****####" # Nur Ländercode + letzte 4
- query: "list_users"
max_rows: 100
strip_columns: ["password_hash", "secret_key"]
RESP-001PASS
Spaltenmaskierung angewendet
Originale Datenbank-Antwort
id | name | email | ssn | phone
----+------------+--------------------+-------------+---------------
1 | Max Müller | max@beispiel.de | 123-45-6789 | +4915112345678
Maskierte Antwort (an Client geliefert)
id | name | email | ssn | phone
----+------------+--------------------+-------------+---------------
1 | Max Müller | ****@****.*** | XXX-XX-6789 | +49****5678
Sensible Spalten werden automatisch maskiert, bevor die Antwort die Anwendung erreicht. Die Originaldaten verlassen nie das ALG.
RESP-002BLOCKED
Zeilenlimit überschritten
Abfrage (max_rows: 1 konfiguriert)
SELECT * FROM users WHERE department = $1 -- gibt 50 Zeilen zurück
Erwartete Antwort
ERROR: Response-Validierung fehlgeschlagen
DETAIL: Abfrage gab 50 Zeilen zurück, Maximum ist 1.
HINT: Fügen Sie strengere WHERE-Bedingungen hinzu oder erhöhen Sie max_rows in der Policy.
Wenn die Datenbank mehr Zeilen als max_rows zurückgibt, wird die gesamte Antwort blockiert, um Massendaten-Exfiltration zu verhindern.
RESP-003PASS
Spalten-Stripping
Originale Datenbank-Antwort
id | name | password_hash | secret_key
----+------------+--------------------------------------+------------
1 | Max Müller | $argon2id$v=19$m=65536,t=3,p=4$... | sk_live_...
Bereinigte Antwort
id | name
----+------------
1 | Max Müller
Spalten in der strip_columns-Liste werden vollständig aus der Antwort entfernt. Die Anwendung sieht sie nie.