-- Zweiter Teil von #34: Aufbewahrungsfrist als eigene, änderbare Policy (kein fester Gesetzeswert - die DSGVO -- selbst schreibt für sowas keine feste Zahl vor, sondern nur den Grundsatz der Speicherbegrenzung, Art. 5 Abs. 1 -- lit. e). Voreinstellung 180 Tage als verbreitete Praxis-Richtgröße für sicherheitsrelevante Protokolldaten; -- vom Nutzer je nach eigener Lösch-/Aufbewahrungsrichtlinie anzupassen. CREATE TABLE audit_settings ( id TINYINT PRIMARY KEY DEFAULT 1, retention_days INT NOT NULL DEFAULT 180, updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) ); INSERT INTO audit_settings (id) VALUES (1); -- Löschen einzelner Zeilen bricht die Hash-Kette (jede Zeile hasht die vorherige mit); ein Checkpoint macht das -- rückwirkende Löschen alter Zeilen trotzdem nachvollziehbar überprüfbar: verifyAuditChain beginnt danach nicht -- mehr bei der Genesis-Null, sondern beim Hash der zuletzt gelöschten Zeile, sofern die neue erste Zeile genau -- darauf verweist (sonst würde eine echte Manipulation als "nur aufgeräumt" durchgehen). CREATE TABLE audit_retention_checkpoints ( id BIGINT AUTO_INCREMENT PRIMARY KEY, purged_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), purged_count INT NOT NULL, purged_through_id BIGINT NOT NULL, checkpoint_hash CHAR(64) NOT NULL, retention_days INT NOT NULL );