Zum Inhalt springen

Audit und Historisierung

Status: Entwurf · Spec-Kandidat: ja

Pflicht zu protokollierende Aktionen

AktionAuslö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_data jsonb)
  • neue Werte (new_data jsonb)
  • 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) hat read_audit-Permission auf AA_AUDIT_LOG und DDM_ENTITY_VERSION.
  • Schreiben erfolgt ausschließlich durch den Service-Layer mit eingeschränkten DB-Privilegien (kein UPDATE/DELETE auf AA_AUDIT_LOG aus Anwendungssicht).
  • AA_AUDIT_LOG.actor_principal_id referenziert 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).

Verwandte Dokumente