MySQL-Sicherheitshärtung (Statusprüfung, Netzwerk, TLS, Authentifizierung, Berechtigungen, Audit, Verschlüsselung)
MySQLStufe: MittelDauer: 5 Min. (Prüfung) – 3 Std. (vollständige Härtung)Dies ist kein Installationsguide: Er findet und schließt die Lücken eines laufenden MySQL-8.4-/8.0-Servers. Zuerst listet die rein lesende Statusprüfung die Befunde nach Schweregrad auf und nennt für jeden Befund die zugehörige Karte; danach schließt du die Bereiche einzeln oder alle nacheinander: bind_address, Firewall und Host-Einschränkung der Konten; TLS, require_secure_transport und VERIFY_IDENTITY auf dem Client; caching_sha2_password, Passwortrichtlinie, Remote-root und anonyme Konten; Rollen und ein Anwendungskonto ohne DDL; Audit; InnoDB-Tablespace-Verschlüsselung (Keyring-Komponente); verschlüsselte Backups; Betriebssystem; Versionsstand. Audit gibt es in der Community Edition nicht: Dafür brauchst du MySQL Enterprise (kostenpflichtiges Abonnement) oder Percona Server (kostenlos); TDE ist auch in der Community Edition verfügbar. Am Ende läuft die Prüfung erneut.
Topologie: Ein MySQL-Server + Anwendungsserver (Client-Prüfung); Replica/InnoDB Cluster in den Hinweisen
Szenarien
- Statusprüfung: Welche Lücken habe ich? (rein lesend) — Der erste Scan: anonyme, passwortlose und Remote-root-Konten, Zugriff von überall (%), schwaches Authentifizierungs-Plugin, globale Berechtigungen, TLS, Audit, Verschlüsselung, Dateiberechtigungen und Firewall; er ändert nichts.
- Vollständige Härtung (alles nacheinander) — Neu installierter oder nie gehärteter Server: Alle Bereiche werden in einer sicheren Reihenfolge angewendet; MySQL wird mehrmals neu gestartet (Wartungsfenster nötig).
- Netzwerk und Verbindungen: Wer darf sich von wo verbinden? (bind_address, Firewall, Host-Einschränkung) — MySQL lauscht auf allen Interfaces, Konten haben den Host '%', der Port ist für alle offen. Eine Änderung von bind_address erfordert einen Neustart.
- Verbindungen verschlüsseln (TLS, require_secure_transport, VERIFY_IDENTITY) — Das automatisch erzeugte selbstsignierte Zertifikat ist in Gebrauch, unverschlüsselte Verbindungen werden akzeptiert oder Clients prüfen das Zertifikat nicht. Ohne Unterbrechung mit ALTER INSTANCE RELOAD TLS.
- Authentifizierung und Passwörter (caching_sha2, Passwortrichtlinie, root) — Konten mit mysql_native_password, keine Passwortrichtlinie, Remote-root, anonyme Konten und die test-Datenbank. Keine Unterbrechung.
- Minimale Berechtigungen: Rollen und ein Anwendungskonto ohne DDL — Berechtigungen CREATE/ALTER/DROP oder . auf dem Anwendungskonto, Konten mit FILE/SUPER; Lese-/Schreib-/DDL-Rollen und ein Berechtigungsbericht. Keine Unterbrechung.
- Audit: Wer hat was getan? — Der Prüfer verlangt eine Protokollierung von Sessions und Abfragen. MySQL Community hat kein eingebautes Audit: Enterprise Audit, der Audit Log Filter von Percona Server oder eingeschränkte Optionen für Community. Lizenz: Enterprise Audit gibt es nur mit einem MySQL-Enterprise-Abonnement; der Percona Audit Log Filter ist kostenlos.
- Daten auf der Disk verschlüsseln (InnoDB-Tablespace-Verschlüsselung, Keyring) — Verschlüsselung von Tabellen, Redo, Undo und Binlog gegen den Diebstahl einer Disk oder einer Backup-Kopie; ein Neustart für die Installation der Keyring-Komponente, ALTER-Laufzeit bei großen Tabellen. Auch in Community lizenzfrei; die verschlüsselten bzw. KMS-Keyrings sind Enterprise.
- Sicherheit der Backups (verschlüsselte Backups, login-path, Berechtigungen) — Backups unverschlüsselt oder in einem für alle lesbaren Verzeichnis, Klartextpasswort in Skripten; mysqldump + GPG oder XtraBackup --encrypt, ein Backup-Konto und login-path.
- Betriebssystemseite (Dienstkonto, Berechtigungen, Core Dump, SELinux) — Datenverzeichnis oder Zertifikatsdateien sind für andere zugänglich, secure_file_priv ist leer, local_infile ist aktiv, SELinux ist deaktiviert. Manche Einstellungen werden erst beim Neustart wirksam.
- Patches und Versionen: Bin ich auf einer unterstützten Version? — Version, Supportende (8.0 endete im April 2026) und ausstehende Updates; zum Einspielen verweist er auf den Upgrade-Guide. Rein lesend.
Vor dem Start
- MySQL … läuft, und als root auf dem Server meldet sich der Befehl mysql ohne Passwort an (root@localhost mit auth_socket oder ein mit mysql_config_editor gesetzter login-path client). Wurde die Installation mit dem MySQL-Installationsguide durchgeführt, ist das bereits eingerichtet. Das SQL in den Schritten läuft als root über mysql -t.
- Zum Server sind zwei getrennte SSH-Sessions offen; in einer bleibt der Client mysql geöffnet. Teste nach Änderungen an Konto-Hosts, require_secure_transport und Firewall eine neue Verbindung in einer separaten Session; schließe die alten Sessions erst, wenn sie erfolgreich ist. Die root@localhost-Socket-Anmeldung wird in diesem Guide nie geändert: Sie bleibt immer als Rückweg erhalten.
- Wartungsfenster: In den gewählten Bereichen wird MySQL neu gestartet (bind_address, Keyring-Komponente, Audit-Plugin, Core-Dump-Limit). In einer Umgebung mit Replicas wende es zuerst auf den Replicas an.
- Eine Liste aller Anwendungen, die sich mit MySQL verbinden (Server-IPs, Konten, Treiberversionen). Der Prüfschritt zeigt die aktuellen Verbindungen; ein Client, der nicht auf der Liste steht, kann sich nach der Einschränkung nicht mehr verbinden.
- Ein aktuelles Backup mit getestetem Restore liegt vor (logisch oder XtraBackup). Der Verschlüsselungsschritt (TDE) macht die Daten unlesbar, wenn die Keyring-Datei verloren geht: Erstelle das Backup VOR dem Keyring.
Phasen der Anleitung
- Statusprüfung (rein lesend) — Befunde innerhalb der Datenbank auflisten · Betriebssystemseite prüfen
- Vor dem Start: Rückfallpunkt — Kopie der aktuellen Einstellungen, Konten und Berechtigungen erstellen · Zusätzliches Konfigurationsverzeichnis aktivieren
- Berechtigungen — 1. Diagnose — Berechtigungen der Konten anzeigen
- Berechtigungen — 3. Anwenden — Rollen anlegen und berechtigen · Konten anlegen und den Rollen zuordnen · Direkte Berechtigungen des Anwendungskontos entfernen · Berechtigungsbericht
- Berechtigungen — 4. Prüfung — Prüfen, dass die wirksamen Berechtigungen kein DDL enthalten · DDL-Versuch vom Anwendungsserver
- Berechtigungen — 5. Danach — Migrationskonto außerhalb der Nutzung gesperrt halten
- Authentifizierung — 1. Diagnose — Authentifizierungs-Plugins, Passworteinstellungen und Standardkonten anzeigen
- Authentifizierung — 2. Sicherheitsnetz — Treiberkompatibilität prüfen
- Authentifizierung — 3. Anwenden — Anonyme Konten, Remote-root und die test-Datenbank entfernen · Passwortrichtlinie einrichten (validate_password, Historie) · Konten mit mysql_native_password auf caching_sha2_password umstellen · Persönliches DBA-Konto anlegen
- Authentifizierung — 4. Prüfung — Kontostatus prüfen · Anmeldung als root vom Anwendungsserver versuchen
- TLS — 1. Diagnose — Aktuelle TLS-Einstellungen und unverschlüsselte Clients anzeigen
- TLS — 3. Anwenden — Test-CA und Serverzertifikat erstellen · Schlüssel und Zertifikatsanforderung (CSR) erstellen · Signiertes Zertifikat einspielen · Zertifikat und Schlüssel prüfen · SELinux-Label setzen · Server auf das neue Zertifikat umstellen (ohne Unterbrechung) …
- TLS — 4. Prüfung — Prüfen, dass unverschlüsselte Verbindungen abgelehnt werden
- TLS — 5. Danach: Zertifikatserneuerung — Verfahren zur Zertifikatserneuerung
- Netzwerk — 1. Diagnose: Wer verbindet sich von wo? — Listen-Adresse, Konto-Hosts und aktive Clients anzeigen
- Netzwerk — 3. Anwenden — Konten mit dem Host '%' auf das Anwendungsnetz beschränken · Listen-Adresse einschränken (wirksam beim Neustart) · Port in der Firewall nur für zugelassene Netze öffnen · MySQL für die Listen-Adresse neu starten
- Netzwerk — 4. Prüfung — Verbindung vom Anwendungsserver testen (neue Session)
- Audit — 1. Diagnose — Audit-Plugins und Log-Einstellungen anzeigen
- Audit — 3. Anwenden — Community: fehlgeschlagene Anmeldungen und DML-Anweisungstext protokollieren · Enterprise-Audit-Plugin installieren · Enterprise-Audit-Filter definieren · Percona-Audit-Log-Filter-Komponente installieren · Percona-Audit-Filter definieren · Audit-Log an den zentralen Server weiterleiten (rsyslog imfile) …
- Audit — 4. Prüfung — Eine Änderung vornehmen und ihre Spur ansehen
- Backup — 1. Diagnose — Verschlüsselungsstatus der Backups und Passwortdateien anzeigen
- Backup — 3. Anwenden — Backup-Konto mit minimalen Berechtigungen anlegen · Passwort in einem login-path speichern · Öffentlichen GPG-Schlüssel importieren · Skript für verschlüsselte Backups · Skript für verschlüsselte Backups mit XtraBackup · Schlüsseldatei, Backup-Verzeichnis und manueller Test …
- Backup — 4. Prüfung — Testen, ob sich das verschlüsselte Backup entschlüsseln lässt
- Betriebssystem — 1. Diagnose — Dienstkonto, Berechtigungen, Dateirechte und SELinux
- Betriebssystem — 3. Anwenden — Datei-Import/-Export einschränken · Berechtigungen von Datenverzeichnis und Schlüsseldateien korrigieren · Core Dumps deaktivieren · systemd neu laden und MySQL neu starten · Passwörter aus der Befehlshistorie heraushalten · SELinux im Modus Enforcing halten
- Betriebssystem — 4. Prüfung — Änderungen prüfen
- Verschlüsselung — 1. Diagnose — Keyring- und Verschlüsselungsstatus anzeigen
- Verschlüsselung — 2. Sicherheitsnetz — Vollständiges Backup vor der Verschlüsselung
- Verschlüsselung — 3. Anwenden — Manifest der Keyring-Komponente schreiben · Keyring-Verzeichnis und -Konfiguration vorbereiten · Neustart zum Laden des Keyrings · Verschlüsselung für Redo, Undo, Binlog und neue Tabellen aktivieren · Tabellen der Anwendungsdatenbank verschlüsseln · Keyring-Datei sichern
- Verschlüsselung — 4. Prüfung — Verschlüsselung und Keyring prüfen