DSGVO Betroffenenrechte Technisch Umsetzen
DSGVO Betroffenenrechte technisch umsetzen – Auskunft, Löschung & mehr
Die DSGVO räumt betroffenen Personen acht umfassende Rechte ein. Unternehmen müssen diese Rechte nicht nur kennen, sondern auch technisch in ihre Systeme implementieren. Dieser Leitfaden zeigt, wie Sie jedes Betroffenenrecht korrekt und praktikabel umsetzt.
Die 8 Betroffenenrechte nach der DSGVO
| Recht | Artikel | Bedeutung |
|---|---|---|
| Auskunftspflicht | Art. 15 | Betroffene erhalten Auskunft über ihre Daten |
| Berichtigung | Art. 16 | Unrichtige Daten können korrigiert werden |
| Löschung (Recht auf Vergessenwerden) | Art. 17 | Daten können unter Bedingungen gelöscht werden |
| Einschränkung der Verarbeitung | Art. 18 | Verarbeitung von Daten kann eingeschränkt werden |
| Datenübertragbarkeit | Art. 20 | Daten in strukturiertem Format exportieren |
| Widerspruch | Art. 21 | Widerspruch gegen Verarbeitung möglich |
| Kein automatisiertes Decision Making | Art. 22 | Schutz vor reinen Automatentscheidungen |
| Widerruf der Einwilligung | Art. 7 | Einmal erteilte Einwilligung kann widerrufen werden |
1. Recht auf Auskunft (Artikel 15 DSGVO)
Was bedeutet es?
Jede betroffene Person hat das Recht, vom Verantwortlichen eine Bestätigung darüber zu erhalten, ob personenbezogene Daten sie betreffend verarbeitet werden, und wenn dies der Fall ist, Zugang zu diesen Daten zu erhalten.
Was muss offengelegt werden?
- Verarbeitungszwecke
- Kategorien personenbezogener Daten
- Empfänger der Daten
- Speicherdauer
- Existieren betroffenenrechte (Berichtigung, Löschung, Widerspruch)?
- Quelle der Daten (falls nicht von betroffener Person stammend)
- Automatisierte Entscheidungslogik (falls zutreffend)
Technische Umsetzung
Anforderungen:
- Benutzer-Interface für Dateneinsicht (z. B. Account-Portal)
- Query-Funktion, um alle zu einer Person gehörigen Daten abzurufen
- Export in lesbarem Format (z. B. PDF, HTML)
- Verifiziertes Identitätsmanagement (E-Mail-Bestätigung, OAuth)
-- Beispiel-SQL-Query für Auskunftserteilung SELECT u.user_id, u.email, u.full_name, u.phone, u.created_at, o.order_id, o.amount, o.order_date, lp.log_type, lp.log_date FROM users u LEFT JOIN orders o ON u.user_id = o.user_id LEFT JOIN logs_processing lp ON u.user_id = lp.user_id WHERE u.email = ? AND u.deleted_at IS NULL ORDER BY o.order_date DESC;
Abläuf:
- Benutzer meldet sich an oder verifiziert E-Mail-Adresse
- System führt Query durch und sammelt alle Daten
- Export in strukturiertes Format (PDF, CSV, JSON)
- Bereitstellung zum Download oder per E-Mail
- Protokollierung der Anfrage (wann, von wem)
Zeitfrist: Antwort innerhalb von 1 Monat (verlängerbar um 2 Monate bei komplexen Anfragen).
2. Recht auf Berichtigung (Artikel 16 DSGVO)
Was bedeutet es?
Betroffene können unrichtige personenbezogene Daten berichtigen lassen.
Praktische Implementierung
- Self-Service-Portal, in dem Benutzer ihre Daten editieren können (Name, E-Mail, Adresse)
- Validierung der Eingaben (z. B. E-Mail-Format, Postleitzahl)
- Audit-Log für alle Änderungen
- Manueller Review bei kritischen Daten (z. B. Zahlungsdaten)
-- Beispiel-Audit-Logging für Berichtigungen INSERT INTO audit_log (user_id, action, field_name, old_value, new_value, timestamp) VALUES (123, 'UPDATE', 'email', 'old@example.com', 'new@example.com', NOW());
3. Recht auf Löschung (Artikel 17 DSGVO)
Was bedeutet es?
Betroffene können unter bestimmten Bedingungen die Löschung ihrer Daten fordern („Recht auf Vergessenwerden").
Wann können Daten gelöscht werden?
- Daten sind nicht mehr notwendig (ursprünglicher Zweck erfüllt)
- Betroffene widerruft Einwilligung
- Betroffene legt Widerspruch ein
- Daten wurden rechtswidrig verarbeitet
- Löschung ist gesetzlich verpflichtend
Wann ist Löschung NICHT möglich?
- Vertragliche Verpflichtungen (z. B. Rechnungslegung, Verträge)
- Rechtliche Aufbewahrungspflichten (z. B. Handelsbücher für 10 Jahre)
- Öffentliche Interessen
- Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen
Technische Implementierung
Zwei Strategien:
1. Echte Löschung (Hard Delete)
-- Harte Löschung nach Überprüfung der Aufbewahrungsfrist DELETE FROM users WHERE user_id = ? AND deleted_request_date < DATE_SUB(NOW(), INTERVAL 90 DAY) AND no_legal_holds = TRUE; -- Löschung verknüpfter Daten DELETE FROM orders WHERE user_id = ?; DELETE FROM user_preferences WHERE user_id = ?; DELETE FROM activity_logs WHERE user_id = ?;
2. Anonymisierung (Soft Delete)
Besser für Daten, die aufbewahrt werden müssen:
-- Anonymisierung statt Löschung
UPDATE users
SET
email = CONCAT('anonymized_', MD5(email), '@example.com'),
full_name = 'Anonyme Person',
phone = NULL,
address = NULL,
deleted_at = NOW()
WHERE user_id = ? AND can_be_deleted = TRUE;
Workflow für Löschanfragen
| Schritt | Aktion | Verantwortlich |
|---|---|---|
| 1. Anfrage | Betroffene fordert Löschung an | Betroffene |
| 2. Validierung | Identität verifizieren, Aufbewahrungspflichten prüfen | Datenschutz-Team |
| 3. Genehmigung | Überprüfung durch DPO oder Datenschutz-Verantwortlicher | DPO/Datenschutz |
| 4. Löschung | Hard Delete oder Anonymisierung durchführen | IT/Datenbank-Admin |
| 5. Bestätigung | Betroffene erhält schriftliche Bestätigung der Löschung | Datenschutz-Team |
Zeitfrist: Antwort innerhalb von 1 Monat (verlängerbar um 2 Monate).
4. Recht auf Einschränkung der Verarbeitung (Artikel 18 DSGVO)
Was bedeutet es?
Betroffene können die Verarbeitung einschränken lassen. Dies bedeutet, dass Daten nicht gelöscht, aber nicht mehr verarbeitet werden (außer Speicherung).
Wann ist Einschränkung möglich?
- Betroffene bestreitet die Richtigkeit der Daten
- Verarbeitung ist rechtswidrig, aber Betroffene möchte keine Löschung
- Verantwortlicher benötigt Daten nicht mehr, Betroffene benötigt sie für Rechtsanspruch
- Widerspruch gegen Verarbeitung wurde eingeleitet
Technische Implementierung
-- Flag für Einschränkung
ALTER TABLE users ADD COLUMN processing_restricted BOOLEAN DEFAULT FALSE;
-- Bei Anfrage setzen
UPDATE users
SET processing_restricted = TRUE,
restriction_date = NOW(),
restriction_reason = ?
WHERE user_id = ?;
-- Bei Verarbeitung prüfen
SELECT * FROM users WHERE user_id = ? AND processing_restricted = FALSE;
5. Recht auf Datenübertragbarkeit (Artikel 20 DSGVO)
Was bedeutet es?
Betroffene können ihre Daten in strukturiertem, gängigem und maschinenlesbarem Format erhalten und an einen anderen Verantwortlichen übertragen.
Anforderungen
- Daten müssen in strukturiertem Format vorliegen (JSON, CSV, XML)
- Format muss „gängig" sein (keine proprietären Formate)
- Daten müssen maschinenlesbar sein
- Direktübertragung an anderen Anbieter ist zu unterstützen (falls technisch möglich)
Technische Implementierung
-- Export als JSON (maschinenlesbar)
SELECT JSON_OBJECT(
'user_id', u.user_id,
'email', u.email,
'full_name', u.full_name,
'created_at', u.created_at,
'orders', JSON_ARRAYAGG(
JSON_OBJECT('order_id', o.order_id, 'amount', o.amount)
)
) AS user_data
FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id
WHERE u.user_id = ?
GROUP BY u.user_id;
-- Export als CSV
SELECT 'user_id', 'email', 'full_name', 'created_at'
UNION ALL
SELECT user_id, email, full_name, created_at FROM users WHERE user_id = ?;
Unterstützte Formate: JSON, CSV, XML, PDF (lesbar aber weniger strukturiert)
Zeitfrist: Antwort innerhalb von 1 Monat.
6. Recht auf Widerspruch (Artikel 21 DSGVO)
Was bedeutet es?
Betroffene können gegen die Verarbeitung Widerspruch einlegen, besonders bei Direktmarketing und Profiling.
Wann ist Widerspruch möglich?
- Widerspruch gegen Direktmarketing (z. B. Werbemails)
- Widerspruch gegen Profiling (automatisierte Entscheidungen)
- Widerspruch gegen Verarbeitung für wissenschaftliche Forschung
- Widerspruch gegen Verarbeitung im öffentlichen Interesse
Technische Implementierung
Unsubscribe-Funktionalität:
-- Marketing-Opt-Out
ALTER TABLE users ADD COLUMN marketing_consent BOOLEAN DEFAULT TRUE;
ALTER TABLE users ADD COLUMN marketing_opt_out_date DATETIME;
UPDATE users
SET marketing_consent = FALSE,
marketing_opt_out_date = NOW()
WHERE user_id = ? OR email = ?;
-- Bei E-Mail-Versand prüfen
SELECT * FROM users
WHERE marketing_consent = TRUE
AND email_verified = TRUE;
7. Recht auf Schutz vor automatisiertem Decision Making (Artikel 22 DSGVO)
Was bedeutet es?
Betroffene dürfen nicht ausschließlich auf automatisierter Verarbeitung beruhenden Entscheidungen unterliegen, die ihnen gegenüber Rechtsfolgen hat.
Beispiele automatisierter Entscheidungen
- Automatische Kreditvergabe/Ablehnung
- Automatisierte Bewerbungsablehnung durch KI
- Automatisches Sperrungen von Benutzerkonten
- Automatische Betrugserkennung ohne Mensch-Überprüfung
Technische Implementierung
Menschliche Überprüfung erzwingen:
-- Beispiel: Kreditvergabe mit Human Review CREATE TABLE automated_decisions ( decision_id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, decision_type VARCHAR(100), automated_result VARCHAR(50), -- APPROVED, REJECTED, PENDING human_review_required BOOLEAN DEFAULT TRUE, human_review_date DATETIME, reviewed_by INT, final_result VARCHAR(50), FOREIGN KEY (user_id) REFERENCES users(user_id) ); -- Alle automatisierte Entscheidungen müssen manuell überprüft werden SELECT * FROM automated_decisions WHERE human_review_required = TRUE AND human_review_date IS NULL;
8. Widerruf der Einwilligung (Artikel 7 DSGVO)
Was bedeutet es?
Wenn Daten auf Basis einer Einwilligung verarbeitet werden, kann diese jederzeit widerrufen werden. Das ist ebenso einfach wie die Erteilung.
Technische Implementierung
-- Consent-Management
CREATE TABLE user_consents (
consent_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
consent_type VARCHAR(100), -- MARKETING, ANALYTICS, PROFILING
given BOOLEAN,
given_date DATETIME,
withdrawn_date DATETIME,
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
-- Widerruf
UPDATE user_consents
SET given = FALSE,
withdrawn_date = NOW()
WHERE user_id = ? AND consent_type = 'MARKETING';
-- Prüfung vor Verarbeitung
SELECT * FROM users u
INNER JOIN user_consents c ON u.user_id = c.user_id
WHERE u.user_id = ? AND c.consent_type = 'MARKETING' AND c.given = TRUE;
Response-Workflow für Betroffenenanfragen
| Phase | Aktivität | Frist | Verantwortlich |
|---|---|---|---|
| 1. Anfrage-Eingang | Betroffene sendet Anfrage per Mail, Kontaktformular, oder Portal | Sofort | Support/Datenschutz-Team |
| 2. Bestätigung | Anfrage wird bestätigt, Ticketnummer vergeben | 2-3 Tage | Support-Team |
| 3. Identitätsverifikation | E-Mail-Adresse oder Passwort-Bestätigung | 5 Tage | Support/IT-Security |
| 4. Daten sammeln | Alle Daten aus Systemen abfragen und zusammenstellen | 10-14 Tage | Datenbankteam/DPO |
| 5. Überprüfung | Legal/Compliance Check bei sensiblen Anfragen | 5-10 Tage | Datenschutz/Legal |
| 6. Response | Betroffene erhält Daten, Bestätigung oder Ablehnung | Max. 30 Tage | Support/Datenschutz |
| 7. Archivierung | Anfrage und Antwort dokumentiert für 3 Jahre | Laufend | Dokumentenverwaltung |
Identitätsverifikation: Best Practices
Verifikationsmethoden nach Sensitivität:
- Niedrig (z. B. Auskunft): E-Mail-Verifizierung, Sicherheitsfrage
- Mittel (z. B. Berichtigung): Passwort-Bestätigung, 2FA
- Hoch (z. B. Löschung): ID-Kopie, Video-Verifikation, Notarbestätigung
PHP-Beispiel: Löschanfrage verarbeiten
Hier ein praktisches PHP-Beispiel zum Verarbeiten und Protokollieren von Löschanfragen:
<?php
// Löschanfrage verarbeiten (Art. 17 DSGVO)
// 1. Identität verifizieren
function verify_deletion_request($user_id, $email) {
// E-Mail-Bestätigung oder 2FA überprüfen
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return false;
}
// Prüfe, ob E-Mail zum Benutzer passt
$pdo = new PDO('mysql:host=localhost;dbname=myapp', 'user', 'pass');
$stmt = $pdo->prepare('SELECT id FROM users WHERE id = ? AND email = ?');
$stmt->execute([$user_id, $email]);
return $stmt->rowCount() === 1;
}
// 2. Aufbewahrungspflichten prüfen
function can_be_deleted($user_id) {
$pdo = new PDO('mysql:host=localhost;dbname=myapp', 'user', 'pass');
// Prüfe: Offene Verträge, ausstehende Zahlungen, etc.
$stmt = $pdo->prepare('
SELECT COUNT(*) as active_contracts
FROM contracts
WHERE user_id = ? AND status = "active"
');
$stmt->execute([$user_id]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result['active_contracts'] === 0;
}
// 3. Löschanfrage loggen
function log_deletion_request($user_id, $email, $status) {
$pdo = new PDO('mysql:host=localhost;dbname=myapp', 'user', 'pass');
$stmt = $pdo->prepare('
INSERT INTO deletion_requests (user_id, email, status, requested_at, deadline)
VALUES (?, ?, ?, NOW(), DATE_ADD(NOW(), INTERVAL 30 DAY))
');
$stmt->execute([$user_id, $email, $status]);
}
// 4. Daten anonymisieren oder löschen
function delete_user_data($user_id) {
$pdo = new PDO('mysql:host=localhost;dbname=myapp', 'user', 'pass');
// Option A: Anonymisierung (Soft Delete)
$stmt = $pdo->prepare('
UPDATE users
SET
email = CONCAT("anonymized_", MD5(CONCAT(id, NOW())), "@deleted.local"),
first_name = "Anonyme Person",
last_name = "",
phone = NULL,
address = NULL,
deleted_at = NOW(),
status = "deleted"
WHERE id = ?
');
$stmt->execute([$user_id]);
// Option B: Hard Delete (vollständige Löschung)
// DELETE FROM users WHERE id = ? AND status = "marked_for_deletion";
// Verknüpfte Daten löschen
$pdo->prepare('DELETE FROM user_sessions WHERE user_id = ?')->execute([$user_id]);
$pdo->prepare('DELETE FROM user_preferences WHERE user_id = ?')->execute([$user_id]);
return true;
}
// 5. Bestätigung senden
function send_deletion_confirmation($email, $user_id) {
$token = bin2hex(random_bytes(32));
// Token in DB speichern
$pdo = new PDO('mysql:host=localhost;dbname=myapp', 'user', 'pass');
$pdo->prepare('
INSERT INTO deletion_confirmations (user_id, token, expires_at)
VALUES (?, ?, DATE_ADD(NOW(), INTERVAL 24 HOUR))
')->execute([$user_id, hash('sha256', $token)]);
// E-Mail mit Bestätigungslink senden
$confirm_url = "https://example.com/api/confirm-deletion?token=" . $token;
mail($email, 'Löschanfrage bestätigen',
"Bitte bestätigen Sie die Löschung Ihres Accounts: $confirm_url");
return true;
}
// Hauptfunktion
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_account'])) {
$user_id = $_SESSION['user_id'];
$email = $_POST['email'];
if (verify_deletion_request($user_id, $email)) {
if (!can_be_deleted($user_id)) {
die("Ihr Account kann noch nicht gelöscht werden. "
. "Bitte saldieren Sie ausstehende Verpflichtungen.");
}
log_deletion_request($user_id, $email, 'pending');
send_deletion_confirmation($email, $user_id);
echo "Bestätigungsemail gesendet. "
. "Bitte bestätigen Sie die Löschung innerhalb von 24 Stunden.";
} else {
echo "Identitätsverifizierung fehlgeschlagen.";
}
}
// Bestätigung verarbeiten
if ($_GET['action'] === 'confirm-deletion' && isset($_GET['token'])) {
$token_hash = hash('sha256', $_GET['token']);
$pdo = new PDO('mysql:host=localhost;dbname=myapp', 'user', 'pass');
$stmt = $pdo->prepare('
SELECT user_id FROM deletion_confirmations
WHERE token = ? AND expires_at > NOW()
');
$stmt->execute([$token_hash]);
if ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
$user_id = $result['user_id'];
delete_user_data($user_id);
log_deletion_request($user_id, '', 'completed');
echo "Ihr Account wurde erfolgreich gelöscht.";
} else {
echo "Token ungültig oder abgelaufen.";
}
}
?>
Häufige Fehler bei der Implementierung
| Fehler | Folge | Lösung |
|---|---|---|
| Zu strikte Identitätsverifikation | Betroffene können Rechte nicht ausüben | Verhältnismäßige Verifikation; einfache E-Mail-Bestätigung genügt oft |
| Löschung ohne Prüfung | Verletzung von Aufbewahrungspflichten | Prüfe vorher: Steuerdaten, Verträge, Compliance-Anforderungen |
| Keine Dokumentation | Bußgelder bei Prüfung durch Behörden | Alle Anfragen und Responses dokumentieren (3 Jahre Aufbewahrung) |
| Zu lange Antwortzeit | Bußgelder (bis zu 4% des Jahresumsatzes) | Automatisierte Prozesse implementieren, 30-Tage-Frist im System planen |
| Keine Unterstützung für Datenportabilität | Verstoß gegen Art. 20 DSGVO | JSON/CSV-Export implementieren, API für Drittanbieter-Zugriff |
Technische Checkliste für Betroffenenrechte
| Anforderung | Implementiert? |
|---|---|
| Auskunfts-Interface für Benutzer (z. B. Accountportal) | ☐ |
| Bearbeitungs-/Editier-Funktion für Kundendaten | ☐ |
| Lösch-/Anonymisierungs-Funktion mit Audit-Log | ☐ |
| Einschränkungs-Flag in Datenbank | ☐ |
| Export in JSON/CSV (Datenportabilität) | ☐ |
| Unsubscribe/Widerspruchs-Funktion | ☐ |
| Consent-Management-System (Einwilligungen verwalten) | ☐ |
| Identitätsverifikation (E-Mail, 2FA) | ☐ |
| Kontaktformular oder E-Mail-Adresse für Anfragen | ☐ |
| 30-Tage-Frist-Tracking im System | ☐ |
| Dokumentation aller Anfragen (Audit-Log) | ☐ |
| Automatisierte Entscheidungen: Mensch-Überprüfung erzwingen | ☐ |