Benutzerdaten DSGVO konform löschen

Schon mit TYPO3 4.6, also viele Jahre vor Einführung der DSGVO, wurde der TableGarbageCollection-Task eingeführt. Mit diesem Scheduler-Task können alte Datensätze einer ausgewählter Datenbanktabellen gelöscht werden. Lange Zeit wurde dieser Task nur für die Systemtabelle sys_log verwendet, denn ohne Löschung alter Daten konnte diese Tabelle viele Gigabyte groß werden - und damit die Performance verschlechtern.

In Zeiten von DSGVO erhält dieser Task wieder mehr Beachtung. In letzter Zeit  sind noch die Tabellen sys_history und, sofern indexed_search aktiviert wurde, die Tabelle index_stat_search  hinzugekommen.

Aber auch für eigene oder fremde Extensions (über ein SitePackage) kann der Scheduler-Task über einen Hook mit weiteren Tabellen erweitert werden.

Powermail nutzt diesen Hook bereits seit September 2017 und fügt auf diese Weise noch die Tabellen tx_powermail_domain_model_answer und tx_powermail_domain_model_mail hinzu. Diese Tabellen enthalten persönliche Daten, die über Powermail-Formulare eingegeben wurde. Aus Datenschutzgründen sollten diese Daten nach z.B. 30 Tagen automatisiert gelöscht werden.

Aktuell müsst Ihr für jede einzelne Tabelle einen eigenen Task anlegen. Auf der einen Seite umständlich, aber auf der anderen Seite könnt Ihr somit pro Tabelle individuell angeben, wie alt die Datensätze sein müssen, bevor sie gelöscht werden.

Bei eigenen Extensions, die persönliche Daten speichern, kann die Datenbanktabelle nach folgendem Schema in der Datei ext_localconf.php in den Scheduler Task mit aufgenommen werden:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks'][\TYPO3\CMS\Scheduler\Task\TableGarbageCollectionTask::class]['options']['tables']['my_table_name'] = [
    'dateField' => 'tstamp',
    'expirePeriod' => 30
];

Mittels dateField wird angegeben, welche Spalte der Tabelle verwendet werden soll, um herauszufinden welche Datensätze älter sind als die Angabe aus expirePeriod. Interessanterweise wird bei Wechsel einer Tabelle im Task automatisch der Standardwert für expirePeriod aus dieser Hook-Konfiguration auch im Task entsprechend vorausgefüllt.

Wird keine individuelle Konfiguration für die Tabellen gewünscht, kann die Checkbox alle Tabellen aktiviert werden. In diesem Falle kann die expirePeriod nicht mehr individuell je Tabelle angegeben werden. Stattdessen wird der Standardwert aus expirePeriod verwendet.

Aktualisiert: 26.07.2019