DBAtlas · Atlas für Datenbankbetrieb

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
Schritt-für-Schritt-Plan für Ihre Umgebung öffnen →