Wie lange darf ein Kundenkonto bleiben?
Die Speicherdauer ist die Zeit, für die Daten aufbewahrt werden dürfen. Danach müssen personenbezogene Daten gelöscht oder anonymisiert werden, wenn kein Grund mehr besteht, sie zu behalten.
Ein Online-Shop hat Konten von Personen, die seit Jahren nichts mehr gekauft haben. Wer entscheidet, wann diese Konten verschwinden, und wie findet man sie in der Datenbank?
Am Ende dieser Lektion
Notiz
Ich kann festlegen, wie lange Daten bleiben, und sie rechtzeitig löschen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Speicherdauer | die Zeit, für die Daten aufbewahrt werden dürfen | |
| Löschfrist | der Zeitpunkt, an dem Daten gelöscht sein müssen | |
| Aufbewahrungspflicht | eine Regel, die verlangt, bestimmte Daten zu behalten | Rechnungen |
| Löschkonzept | eine Liste, die für jede Datenart Frist und Löschweg nennt | |
| Sicherung | eine Kopie der Daten für den Notfall |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Jede Datenart braucht einen Zweck und eine Frist
Daten dürfen nur so lange bleiben, wie ihr Zweck besteht. Ein Newsletter-Abo endet mit der Abmeldung. Eine Rechnung muss oft mehrere Jahre bleiben, weil eine Aufbewahrungspflicht es verlangt.
Ein Löschkonzept hält das für jede Datenart fest. Die Fristen in der Tabelle unten sind Beispiele. Ihre Organisation legt die echten fest.
Ein Beispiel: ein kleines Löschkonzept
| Datenart | Zweck | Beispielfrist | Danach |
|---|---|---|---|
| Newsletter-Adresse | Mails senden | Bis zur Abmeldung | Zeile löschen |
| Kundenkonto | Bestellen und Support | 2 Jahre nach dem letzten Kauf | Konto löschen |
| Rechnung | Buchführung | Wie die Aufbewahrungspflicht es verlangt | Löschen, wenn die Pflicht endet |
| Bewerbungsunterlagen | Auswahl der Stelle | 6 Monate nach der Absage | Dokumente löschen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Abfrage findet die Zeilen jenseits der Frist
Eine Frist ist nur wirksam, wenn jemand die Zeilen findet, die sie überschritten haben. Das geht mit einem Vergleich auf ein Datum. In SQL schreiben Sie Daten als Text der Form 2025-01-01, das Jahr zuerst.
Die Lektion arbeitet an einer Kopie der Kundentabelle. Richten Sie zuerst das Terminal ein.
Das Zertifikat des Servers annehmen
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Abkürzung für den Client
alias db='mariadb -h db -u student -pstudent -t -e'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine eigene Datenbank anlegen
db "CREATE DATABASE IF NOT EXISTS student_datenschutz"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine alte Kopie wegwerfen
db "DROP TABLE IF EXISTS student_datenschutz.kunden_kopie"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Kundentabelle kopieren
db "CREATE TABLE student_datenschutz.kunden_kopie AS SELECT id, first_name, last_name, email, joined_on FROM shop.customers"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wer hat seit 2025 nichts bestellt?
db "SELECT customer_id, MAX(ordered_at) AS letzte_bestellung FROM shop.orders GROUP BY customer_id HAVING MAX(ordered_at) < '2025-01-01' ORDER BY customer_id"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Neunzehn Personen sind über die Frist
Der Run zeigt 19 Personen, deren letzte Bestellung vor dem 1. Januar 2025 liegt. Angenommen, die Frist für ein Konto ist abgelaufen, wenn zwei Jahre nichts bestellt wurde: Dann wären das die Konten, die weg müssen.
Erst ansehen, dann löschen. So wie bei jedem DELETE sehen Sie vorher, welche Zeilen es trifft.
Die Zeilen der Kopie zählen
db "SELECT COUNT(*) AS vorher FROM student_datenschutz.kunden_kopie"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Konten über der Frist in der Kopie löschen
db "DELETE FROM student_datenschutz.kunden_kopie WHERE id IN (SELECT customer_id FROM shop.orders GROUP BY customer_id HAVING MAX(ordered_at) < '2025-01-01')"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Zeilen noch einmal zählen
db "SELECT COUNT(*) AS nachher FROM student_datenschutz.kunden_kopie"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Von vierzig Zeilen bleiben einundzwanzig
Vorher standen 40 Zeilen in der Kopie, danach 21. Genau die 19 Personen aus dem Run vorher sind weg.
Vier Personen im Shop haben nie bestellt. Sie stehen in keiner der beiden Abfragen. Ein Löschkonzept muss auch für sie eine Frist nennen, zum Beispiel ab dem Beitrittsdatum.
Ein häufiger Fehler
Warnung
Viele glauben, mit dem DELETE sei die Person aus dem System verschwunden. Das stimmt nicht. Die Daten stehen noch in Sicherungen, in Exporten und in Protokollen. Ein Löschkonzept nennt darum auch, wie lange eine Sicherung lebt.
Probieren Sie es: Belege über der Frist
-- Belege, die vor dem 1. Januar 2020 ausgestellt wurden.
SELECT id, kunde, ausgestellt FROM belege
WHERE ausgestellt < '2020-01-01'
ORDER BY id;
-- Ändern Sie das Datum auf 2022-01-01. Wie viele Belege sind jetzt zu alt?