Prüfprotokoll
Das Prüfprotokoll zeichnet auf, wer wann welchen Datensatz geändert hat. Es lässt sich nicht bearbeiten und dient als Nachweis.
Zu finden unter Audit Logs. Nötig ist audit:read.
Was in einem Eintrag steht
Mandant, Benutzer, Handlung (CREATE, UPDATE, DELETE, APPROVAL, EXPORT, CONFIG_CHANGE, LOGIN …), das betroffene Objekt und seine Kennung, Adresse und Browserkennung sowie — je nach Vorgang — die Werte vorher, nachher und zusätzliche Angaben.
Bei einer Korrektur etwa stehen die alten und die neuen Zeiten darin. Bei einem Abschluss Soll, Ist, Differenz und Schlusssaldo — und ausdrücklich, ob eine Stundenzahl von Hand übertragen wurde.
Die Hash-Kette
Jeder Eintrag trägt einen SHA-256-Hash über seinen Inhalt und den Hash seines Vorgängers. Wird ein Eintrag verändert oder entfernt, bricht die Kette und ist nachweisbar gebrochen.
Zusätzlich sperren Datenbank-Trigger UPDATE und DELETE auf der Protokolltabelle: Auch wer Zugang zur Datenbank hat, kann keine Zeile ändern.
Die Prüfung
Über Kette prüfen rechnet die Anwendung beides nach:
- Die Verkettung — zeigt das Entfernen oder Umsortieren von Einträgen.
- Den Inhalt — zeigt Änderungen an einem einzelnen Eintrag.
Das Ergebnis nennt, ob die Kette gültig ist, an welchem Eintrag sie gegebenenfalls bricht und aus welchem Grund.
Warum eine Fassungsnummer am Eintrag steht
Die Hash-Bildung gibt es in zwei Fassungen. Die erste verkettete die JSON-Felder in der Reihenfolge des Quelltexts; PostgreSQL sortiert die Schlüssel beim Speichern aber um, sodass sich diese Einträge nicht zuverlässig nachrechnen lassen. Die zweite sortiert die Schlüssel selbst und ist dadurch unabhängig davon, wie die Datenbank sie ablegt. Protokollzeilen sind unveränderlich; deshalb steht die Fassung an jeder Zeile, und die Prüfung richtet sich danach.
Einträge der ersten Fassung werden gezählt, aber nicht als Manipulation gemeldet. Sonst stünde eine ältere Installation dauerhaft auf „Kette gebrochen“, und die Meldung, auf die es ankommt, ginge darin unter. Für den nachrechenbaren Teil gilt weiterhin: jeder Bruch, jede Abweichung ist ein Befund.
Warum die Kette sich nicht gabelt
Vorgänger lesen und anhängen laufen unter einer Sperre je Mandant ab. Ohne sie lesen zwei gleichzeitige Vorgänge denselben letzten Eintrag, und die Kette gabelt sich — ein Fehlalarm, der eine echte Manipulation nicht mehr unterscheidbar macht.
Aufbewahrung
§16 Abs. 2 ArbZG verlangt, Nachweise über die Arbeitszeit mindestens zwei Jahre aufzubewahren. Für das Prüfprotokoll selbst sieht die Löschdurchsetzung keine Frist vor; es bleibt, bis der Mandant gelöscht wird.