LU12d - Datenschutz in Datenbanken

Ziel dieser Seite Ein praxisnaher Überblick für Mediamatik-Lernende: Was bedeutet Datenschutz konkret bei MySQL? Was ist in der Schweiz (DSG) sowie im EU-Kontext (DSGVO) zu beachten? Welche technischen & organisatorischen Massnahmen (TOM) sind sinnvoll?

Hinweis (keine Rechtsberatung): Diese Unterlage dient der Sensibilisierung und Praxisorientierung im Unterricht. Für verbindliche Auskünfte bitte interne Richtlinien/Datenschutzbeauftragte/Jurist:innen konsultieren.

1) Warum Datenschutz in der DB wichtig ist

2) Rechtlicher Rahmen (Kurzüberblick)

Merke: Recht klärt das «Was & Warum», Technik (MySQL/Architektur) liefert das «Wie» (Sicherheit, Zugriffskontrolle, Logs, Backups).

3) Datenarten & Schutzbedarf

Kategorie Beispiele Schutz-Niveau
PII (Personendaten) Name, E-Mail, IP, Benutzername Mittel–hoch
Besonders schützenswerte Daten Gesundheit, Religion, politische Meinung Hoch
Geschäftsgeheimnisse Preise intern, Prototypen Mittel–hoch
Betriebsdaten Log- & Metrikdaten (können PII enthalten) Abhängig vom Inhalt

4) Grundsätze (DSG/DSGVO) in die Praxis übersetzen

5) Technische & organisatorische Massnahmen (TOM) für MySQL

5.1 Zugriff & Rollen (Least Privilege)

-- Beispiel: minimaler App-User (nur SELECT/INSERT auf produktivem Schema)
CREATE USER 'app_ro'@'localhost' IDENTIFIED BY 'Str0ng!Pass';
GRANT SELECT ON prod_db.* TO 'app_ro'@'localhost';

5.2 Starke Passwörter & Policies

-- Passwortrichtlinie (Beispiel; Anpassung je nach Policy)
INSTALL COMPONENT 'file://component_validate_password';
SET PERSIST validate_password.length = 12;
 
-- Ablauf/Lock pro Benutzer
ALTER USER 'app_rw'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
ALTER USER 'app_rw'@'localhost' FAILED_LOGIN_ATTEMPTS 6 PASSWORD_LOCK_TIME 2;

5.3 Verschlüsselung – Transport & Ruhe

Transport erzwingen (Server)

# my.cnf (Beispiel)
require_secure_transport = ON
ssl_cert = /etc/mysql/ssl/server-cert.pem
ssl_key  = /etc/mysql/ssl/server-key.pem
ssl_ca   = /etc/mysql/ssl/ca.pem

At-Rest (InnoDB)

# my.cnf
early-plugin-load = keyring_file.so
keyring_file_data = /var/lib/mysql-keyring/keyring
innodb_encrypt_tables = ON
innodb_encrypt_log = ON
-- Schlüsselrotation
ALTER INSTANCE ROTATE INNODB MASTER KEY;

5.4 Protokollierung & Auditing (sparsam mit PII)

5.5 Backups & Wiederherstellung

# Beispiel: verschlüsseltes Dump
mysqldump --single-transaction --routines prod_db \
| gpg --symmetric --cipher-algo AES256 \
> prod_db-$(date +%F).sql.gpg

5.6 Datenmaskierung/Anonymisierung (für Test & Analytics)

-- Beispiel: Sicht mit maskierter E-Mail
CREATE OR REPLACE VIEW v_users_masked AS
SELECT user_id,
       display_name,
       CONCAT(LEFT(email,2),'***@',SUBSTRING_INDEX(email,'@',-1)) AS email_masked
FROM users;
 
-- Pseudonymisierung (one-way Hash)
UPDATE users SET email = SHA2(email,256) WHERE /* in Dev/Copy */ 1=1;

5.7 WordPress-spezifische Hinweise

6) Prozesse & Organisation