24 lines
1.4 KiB
MySQL
24 lines
1.4 KiB
MySQL
|
|
-- 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
|
||
|
|
);
|