AA_AUDIT_LOG
Status: Entwurf · Spec-Kandidat: ja
Zweck
Append-only-Protokoll aller fachlich relevanten Änderungen. Pflicht-Anforderung (FR-010, BR-08, AC-006).
Felder
| Feld | Typ | Pflicht | Hinweise |
|---|---|---|---|
id | bigserial | ja | PK |
tenant_id | uuid | nein | FK → AA_TENANT, gesetzt für tenant-bezogene Aktionen; NULL für globale Aktionen (z. B. Tenant-Anlage selbst) |
entity_name | text | ja | logischer Tabellenname (z. B. DDM_ENTITY, DDM_ENTITY_TYPE, DDM_ENTITY_RELATION) |
entity_id | uuid | nein | Datensatz-ID, falls vorhanden |
action | mdm.audit_action | ja | siehe Wertebereich |
changed_at | timestamptz | ja | default now() |
changed_by | text | nein | Benutzerkennung (z. B. OIDC sub oder E-Mail) |
actor_principal_id | uuid | nein | FK-äquivalent auf AA_APP_USER.id / AA_SERVICE_ACCOUNT.id; auflösbar über mdm.v_principal |
reason | text | nein | optionale Begründung |
correlation_id | uuid | nein | erlaubt Gruppierung zusammenhängender Änderungen |
old_data | jsonb | nein | Vorher-Wert |
new_data | jsonb | nein | Nachher-Wert |
metadata | jsonb | ja | default '{}', JSON-Objekt-Constraint |
Wertebereich action
Fachliche Aktionen: insert, update, archive, restore, soft_delete, hard_delete, relate, unrelate, version_create.
Sicherheitsrelevante Aktionen: permission_grant, permission_revoke, role_assign, role_unassign, login, access_denied.
Job-/Worker-Lebenszyklus (siehe AA_JOB, Asynchrone Jobs): job_enqueued, job_done, job_dlq, job_replay, job_discard.
Cross-Reference / External-System-Mapping (siehe DDM_ENTITY_EXTERNAL_ID): external_id_link, external_id_unlink. Re-Mapping = unlink + link (zwei Audit-Zeilen, ggf. via correlation_id gekoppelt).
Anhänge / Dokumente (siehe DDM_ATTACHMENT, Anhänge-Verhalten): attachment_uploaded, attachment_scanned, attachment_deleted, attachment_restored, attachment_hard_deleted. Forensik-relevante Felder: metadata.storage_uri, metadata.sha256, metadata.virus_scan_engine.
Email-Outcomes (siehe Email-Schnittstelle, AA_EMAIL_LOG): email_sent, email_sent_dryrun, email_delivered, email_bounced, email_complained, email_suppressed. Pro Audit-Zeile referenziert metadata.email_log_id den passenden AA_EMAIL_LOG-Eintrag.
Constraints
audit_log_metadata_is_object_chk
Indizes
ix_audit_log_lookupauf(entity_name, entity_id, changed_at DESC)
Verhalten
- Audit-Einträge werden vom Service-Layer in derselben Transaktion wie die Datenänderung geschrieben. Es gibt keine generischen Audit-Trigger.
- Mindestinhalt pro Eintrag: Benutzer, Zeitpunkt, Objekt, Aktion, alte Werte, neue Werte, optionale Begründung.
- Tabelle ist append-only: keine UPDATE-/DELETE-Pfade im Service-Layer; entsprechende Rolle/Privilegien.
correlation_iderlaubt Gruppierung mehrerer Audit-Einträge eines fachlichen Vorgangs (z. B. Anlegen einer Entität samt Beziehungen).
Offen
- Aufbewahrungsfristen (regulatorisch / fachlich) – siehe Offene Punkte.
- Partitionierung großer Audit-Volumina (z. B. monatlich) ist nicht im DDL festgelegt.
- Read-Modell für Audit-Suche (Auditor-Rolle) ist noch nicht spezifiziert.