Audit und Historisierung
Status: Entwurf · Spec-Kandidat: ja
Pflicht zu protokollierende Aktionen
| Aktion | Auslöser |
|---|---|
Anlegen (insert) | Neue Entität, neues Metadaten-Objekt, neue Beziehung |
Ändern (update) | Änderung an Entität, DDM_ENTITY_TYPE_ATTRIBUTE, DDM_RELATION_TYPE, DDM_ENUM_SET/DDM_ENUM_VALUE, DDM_ENTITY_RELATION |
Archivieren (archive) | Statuswechsel auf archived |
Wiederherstellen (restore) | Statuswechsel weg von archived, Aufheben Soft Delete |
Soft Delete (soft_delete) | deleted_at gesetzt |
Hard Delete (hard_delete) | physisches DELETE (administrativ) |
Beziehung anlegen / entfernen (relate, unrelate) | INSERT bzw. Soft Delete in DDM_ENTITY_RELATION |
Typdefinitionen ändern (update) | Änderung an DDM_ENTITY_TYPE oder DDM_ENTITY_TYPE_ATTRIBUTE |
Versionssnapshot (version_create) | INSERT in DDM_ENTITY_VERSION |
Rolle zugewiesen / entzogen (role_assign, role_unassign) | INSERT bzw. Soft Delete in AA_PRINCIPAL_ROLE |
Permission gewährt / entzogen (permission_grant, permission_revoke) | INSERT/Soft Delete in AA_ROLE_PERMISSION oder AA_ACL_ENTRY |
Login (login) | erfolgreiche Authentifizierung |
Zugriff verweigert (access_denied) | Service hat 403 zurückgegeben (Pflicht für Schreibversuche, optional sonst) |
Mindestinhalt je Audit-Eintrag
- Benutzer (
changed_by) - Zeitpunkt (
changed_at) - Objekt (
entity_name,entity_id) - Aktion (
action) - alte Werte (
old_datajsonb) - neue Werte (
new_datajsonb) - optionale Begründung (
reason) - Korrelations-ID (
correlation_id) zur Gruppierung mehrerer Einträge eines fachlichen Vorgangs
Verantwortung
- Audit ist Service-Layer-Pflicht, nicht Trigger-basiert (siehe Trigger).
- Audit-Schreibung läuft in derselben Transaktion wie die fachliche Änderung. Bei Rollback der Änderung wird auch das Audit verworfen – beabsichtigt, da kein „phantomes” Audit existieren soll.
- Im selben Transaktions-Schritt schreibt der Service auch den passenden
AA_OUTBOX_EVENT(transactional outbox). Damit sind Audit (langlebige Wahrheit) und Outbox (operative Eventquelle) konsistent.
Versionierung
Ergänzend zum Audit-Log werden vollständige Snapshots in DDM_ENTITY_VERSION abgelegt (siehe DDM_ENTITY_VERSION).
- Audit-Log: dünnere Vorher/Nachher-Diffs, schnelle Suche je Objekt.
- entity_version: vollständiger Datensatz-Schnappschuss, für Wiederherstellung und Punkt-in-Zeit-Anzeigen.
Zugriff
- Rolle
auditor(System-Rolle, siehe Autorisierung) hatread_audit-Permission aufAA_AUDIT_LOGundDDM_ENTITY_VERSION. - Schreiben erfolgt ausschließlich durch den Service-Layer mit eingeschränkten DB-Privilegien (kein UPDATE/DELETE auf
AA_AUDIT_LOGaus Anwendungssicht). AA_AUDIT_LOG.actor_principal_idreferenziert den auflösbaren Principal (siehe AA_AUDIT_LOG).
Offen
- Aufbewahrungsfristen (regulatorisch / fachlich) – siehe Offene Punkte.
- Partitionierung der
AA_AUDIT_LOG-Tabelle (z. B. monatlich) für Volumenkontrolle. - Snapshot-Frequenz und genauer Inhalt von
DDM_ENTITY_VERSION.snapshot(siehe DDM_ENTITY_VERSION).