CodamAIDocs
Themafertig

Datenschutz und Aufbewahrung

Welche personenbezogenen Daten im Audit stehen und wie lange Revisionen aufbewahrt werden.

Ausprägungen
Daten über die handelnde PersonDaten im Objektinhaltnach dem Löschen des ObjektsAufbewahrung ohne Ablaufdatumwer die Historie lesen darf

Worum es geht

Auditing hebt jede Änderung auf, mit dem Inhalt des Objekts und mit Angaben über die Person, die geändert hat. Beides können personenbezogene Daten sein, also Angaben, die sich einem Menschen zuordnen lassen. Für sie gelten die Regeln des Datenschutzes, etwa die DSGVO.

CDMS stellt die Aufzeichnung bereit. Wie lange die Daten bleiben dürfen und wer sie sehen darf, muss dein Projekt entscheiden.

Wo personenbezogene Daten liegen

flowchart LR
    subgraph DB["Mandanten-Datenbank"]
      R[("revinfo<br/>user_id · username<br/>ip_address · user_agent<br/>acting_user_id · acting_username")]
      A[("person_AUD<br/>jeder alte Stand:<br/>name, email, address …")]
      T[("person<br/>nur der aktuelle Stand")]
    end
    subgraph FS["Dateispeicher"]
      V["&lt;fileId&gt;.&lt;Kennung&gt;<br/>alte Dateiinhalte"]
    end
    R --- A
WasWoÜber die API sichtbar?
Benutzernamerevinfo.usernameja, revisionMeta.username
IP-Adresserevinfo.ip_addressja, revisionMeta.ip
Browser oder Programmrevinfo.user_agentja, revisionMeta.useragent
Benutzer-IDrevinfo.user_idnein, nur in der Datenbank
Handelnde Person nach einem Benutzerwechselrevinfo.acting_username, revinfo.acting_user_idName ja, revisionMeta.actingUsername; ID nur in der Datenbank
jeder alte Stand des Objekts<tabelle>_AUDja, revision in der Historie
alte DateiinhalteVersionen im Dateispeichernur über einen Rollback

Woher die Werte kommen, steht unter Was eine Revision festhält.

Zwei Arten von Daten

Personenbezug in der Historie
Über die handelnde Person
in jeder Revision
  • Name und ID aus dem Token
  • IP-Adresse und User-Agent der Anfrage
  • entsteht bei jedem auditierten Modell, auch bei rein technischen Daten
  • zeigt, wer wann gearbeitet hat
Im Inhalt des Objekts
je nach Modell
  • alles, was im Objekt steht, etwa Name, E-Mail, Adresse, Notizen
  • auch Werte, die später geändert oder geleert wurden
  • auch Dateiinhalte bei Datei-Modellen
  • hängt davon ab, was du modellierst

Wie lange Revisionen bleiben

CDMS löscht keine Revision. Es gibt keinen Endpunkt, der Revisionen löscht, kürzt oder unkenntlich macht, und keine eingebaute Aufbewahrungsfrist.

Was mit Revisionen über die Zeit passiert

Wann: PUT, PATCH, Upload, Rollback

Der alte Stand bleibt als Revision. Ein Feld zu leeren entfernt den alten Wert also nicht aus CDMS, er steht weiter in der älteren Revision.

Wann: DELETE, direkt oder per Kaskade

Die Zeile verschwindet, die Historie bleibt vollständig. Die DEL-Revision selbst ist leer bis auf die id, aber jede Revision davor enthält den Inhalt.

Ergebnis: Siehe Was nach dem Löschen bleibt.

Wann: auditiertes Datei-Modell

Alte Inhalte bleiben, solange der Datensatz existiert. Beim Löschen des Datensatzes werden Inhalt und alle Versionen entfernt, die Historie des Datensatzes bleibt.

Ergebnis: Siehe Dateiversionen.

Wann: Das Modell wird auf nicht auditiert gestellt.

Neue Änderungen werden nicht mehr aufgezeichnet. Die bisherigen Revisionen bleiben in der Datenbank.

Löschen oder Unkenntlichmachen von Revisionen ist deshalb eine Aufgabe auf Datenbankebene, außerhalb der CDMS-API. Weil jeder Mandant seine eigene Datenbank mit eigener revinfo hat, betrifft so ein Eingriff immer nur einen Mandanten.

Wer die Historie lesen darf

Die Historie eines Objekts liest, wer die Leserolle und die Historienrolle des Modells hat – und wer das Objekt selbst hätte lesen dürfen. Die Zeilenfilter, die beim Lesen und Suchen mitlaufen, etwa der Owner-Filter, gelten auch hier. Bei einem gelöschten Objekt zählt dafür sein letzter Stand vor der Löschung. Siehe Historie lesen.

Das begrenzt, wer die personenbezogenen Daten in der Historie sieht, aber es hebt die Warnung oben nicht auf: Wer ein Objekt lesen darf, sieht mit der Historienrolle auch alle seine alten Stände.

Worauf dein Projekt achten muss

Soll dieses Modell auditiert werden?
Nachweis oder Rollback nötig?enthält personenbezogene Daten?Empfehlung
nein–nicht auditieren
janeinauditieren. Personenbezug entsteht trotzdem über Name und IP-Adresse der handelnden Person.
jajaauditieren, aber vorher Aufbewahrung, Leserechte und den Umgang mit Löschanfragen festlegen

Fallen

Wie es weitergeht

Quellen im Code und in der Wissensdatenbank
  • CDMS/cdms-persistence-database – auditing/AuditRevisionEntity (revinfo: user_id, username, ip_address, user_agent, acting_user_id, acting_username), AuditRevisionListener, AuditHistoryReader (kein Löschen/Kürzen von Revisionen; store_data_at_delete nicht gesetzt); docs/adr/ADR-019 (Envers nur anhängend)
  • CDMS/cdms-system-layer – AbstractLayer.queryHistory (Lese- und Historienrolle, assertHistoryVisible)
  • CDMS/cdms-localfs-storage – retainCurrentContent (Versionen ohne Aufräumen, ADR-018)
  • CIAS/cias-authentication – JwtSessionFilter (IP, User-Agent), TokenParser (userId, userName)
  • documentation/50-auditierung/01-auditing-und-historie.md (Abschnitt Datenschutz)
Suchen