Wenn Sie eine Verbindung mit einem MySQL-Server herstellen, sollten Sie ein Passwort verwenden. Dieses Passwort wird nicht unverschlüsselt über die Verbindung übertragen. Die Behandlung des Passworts während der Herstellung der Clientverbindung wurde in MySQL 4.1.1 so aktualisiert, dass sie nun sehr sicher ist. Wenn Sie immer noch Passwörter im alten Stil (d. h. vor MySQL 4.1.1) verwenden, beachten Sie, dass der Verschlüsselungsalgorithmus nicht so leistungsfähig ist wie der neuere Algorithmus. Mit ein wenig Aufwand kann ein cleverer Angreifer den Datenverkehr zwischen Client und Server abfangen und das Passwort knacken. (Eine Beschreibung der verschiedenen Methoden für den Umgang mit Passwörtern finden Sie in Abschnitt 5.8.9, „Kennwort-Hashing ab MySQL 4.1“.)
Alle übrigen Informationen werden unverschlüsselt übertragen und können von jedem gelesen werden, der die Verbindung überwachen kann. Wenn die Verbindung zwischen Client und Server durch ein nicht vertrauenswürdiges Netzwerk verläuft und Sie deswegen Bedenken haben, können Sie das komprimierte Protokoll verwenden, um die Entschlüsselung der Daten erheblich zu erschweren. Sie können auch den internen SSL-Support von MySQL verwenden, um die Sicherheit der Verbindung noch mehr zu erhöhen. Siehe auch Abschnitt 5.9.7, „Verwendung sicherer Verbindungen“. Alternativ stellen Sie mit SSH eine verschlüsselte TCP/IP-Verbindung zwischen einem MySQL-Server und einem MySQL-Client her. Einen Open-Source-SSH-Client finden Sie unter http://www.openssh.org/, eine kommerzielle Variante unter http://www.ssh.com/.
Um ein MySQL-System möglichst sicher zu machen, sollten Sie die folgenden Vorschläge dringend beachten:
Verlangen Sie für alle MySQL-Konten die Nutzung eines
Passworts. Ein Clientprogramm kennt die Identität seines
Benutzers nicht unbedingt. Bei Client/Server-Anwendungen ist
es durchaus üblich, dass der Benutzer einen beliebigen
Benutzernamen für das Clientprogramm angeben kann. So kann
beispielsweise jede beliebige Person das Programm
mysql verwenden, um eine Verbindung als
eine andere Person herzustellen, indem sie mysql -u
aufruft, wenn
für other_user
db_name
other_user
kein Passwort
konfiguriert ist. Wenn alle Konten ein Passwort besitzen,
wird das Herstellen einer Verbindung unter Verwendung des
Kontos eines anderen Benutzers erheblich schwieriger.
Eine Beschreibung der Methoden zur Konfiguration von Passwörtern finden Sie in Abschnitt 5.9.5, „Kennwörter einrichten“.
Führen Sie den MySQL-Server niemals als Unix-Benutzer
root
aus. Dies ist extrem gefährlich,
weil jeder Benutzer mit der Berechtigung
FILE
in der Lage ist, auf dem Server die
Erstellung von Dateien als root
anzufordern (z. B. ~root/.bashrc
). Um
dies zu verhindern, verweigert mysqld die
Ausführung als root
, sofern dies nicht
ausdrücklich mit der Option --user=root
festgelegt wurde.
mysqld kann (und sollte) stattdessen als
gewöhnlicher, nichtberechtigter Benutzer ausgeführt
werden. Sie können ein separates Unix-Konto namens
mysql
einrichten, um die Sicherheit noch
weiter zu erhöhen. Dieses Konto verwenden Sie dann nur zur
Administration von MySQL. Um mysqld als
ein anderer Unix-Benutzer zu starten, fügen Sie die Option
user
hinzu, die den Benutzernamen im
Abschnitt [mysqld]
der Optionsdatei
my.cnf
angibt, in der Sie die
Serveroptionen konfigurieren. Zum Beispiel:
[mysqld] user=mysql
Hierdurch wird der Server unabhängig davon, ob Sie ihn manuell oder mithilfe von mysqld_safe oder mysql.server starten, als der angegebene Benutzer gestartet. Weitere Informationen finden Sie unter Abschnitt 5.7.5, „Wie man MySQL als normaler Benutzer laufen läßt“.
Die Ausführung von mysqld als ein
anderer Unix-Benutzer als root
hat nicht
zur Folge, dass Sie den Benutzernamen
root
in der Tabelle
user
ändern müssen.
Benutzernamen für MySQL-Konten haben nichts mit
den Benutzernamen für Unix-Konten zu tun.
Unterbinden Sie die Verwendung von symbolischen
Verknüpfungen mit Tabellen. (Diese Funktionalität kann mit
der Option --skip-symbolic-links
deaktiviert werden.) Dies ist insbesondere dann wichtig,
wenn Sie mysqld als
root
ausführen, da jeder Benutzer, der
Schreibzugriff auf das Datenverzeichnis des Servers hat,
jede beliebige Datei im System löschen kann! Siehe auch
Abschnitt 7.6.1.2, „Benutzung symbolischer Links für Tabellen“.
Vergewissern Sie sich, dass der einzige Unix-Benutzer mit Lese- und Schreibberechtigungen in den Datenbankverzeichnissen der Benutzer ist, als der mysqld ausgeführt wird.
Gewähren Sie die Berechtigungen PROCESS
und SUPER
ausschließlich
Administratoren. Die Ausgabe von mysqladmin
processlist und SHOW
PROCESSLIST
zeigt den Text aller Anweisungen, die
gerade ausgeführt werden. Insofern kann jeder Benutzer, der
die Serverprozessliste anzeigen kann, unter Umständen
Anweisungen sehen, die von anderen Benutzern abgesetzt
werden – z. B. auch UPDATE user SET
password=PASSWORD('not_secure')
.
mysqld reserviert eine zusätzliche
Verbindung für Benutzer mit der Berechtigung
SUPER
, sodass ein MySQL-Benutzer
root
sich auch dann anmelden und die
Serveraktivitäten überprüfen kann, wenn alle normalen
Verbindungen gerade verwendet werden.
Die Berechtigung SUPER
kann zur
Terminierung von Clientverbindungen, zur Änderung des
Serverbetriebs durch Modifikation von Systemvariablen und
zur Steuerung von Replikationsservern verwendet werden.
Gewähren Sie die Berechtigung FILE
ausschließlich Administratoren. Jeder Benutzer mit dieser
Berechtigung kann eine Datei an beliebiger Stelle im
Dateisystem mit den Berechtigungen des
mysqld-Daemons speichern. Um dies ein
wenig sicherer zu gestalten, überschreiben Dateien, die mit
SELECT ... INTO OUTFILE
erzeugt wurden,
keine vorhandenen Dateien und können von allen geschrieben
werden.
Die Berechtigung FILE
kann auch
eingesetzt werden, um jede Datei zu lesen, die von allen
gelesen werden kann oder für den Unix-Benutzer, als der der
Server ausgeführt wird, zugänglich ist. Mit dieser
Berechtigung können Sie jede Datei in eine Datenbanktabelle
einlesen. Dies könnte beispielsweise missbraucht werden,
indem man mit LOAD DATA
die Datei
/etc/passwd
in eine Tabelle einlädt,
die dann mit SELECT
angezeigt werden
könnte.
Wenn Sie Ihrem DNS nicht trauen, sollten Sie IP-Nummern statt Hostnamen in den Grant-Tabellen verwenden. In jedem Fall sollten Sie sehr vorsichtig mit der Erstellung von Einträgen in Grant-Tabellen unter Verwendung von Hostnamenswerten sein, die Jokerzeichen enthalten.
Wenn Sie die Anzahl der für ein Konto verwendbaren
Verbindungen einschränken wollen, können Sie dies tun,
indem Sie die Variable
max_user_connections
in
mysqld einstellen. Die
GRANT
-Anweisung unterstützt auch
Ressourcensteuerungsoptionen, mit denen die Servernutzung
durch ein Konto beschränkt werden kann. Siehe auch
Abschnitt 13.5.1.3, „GRANT
und REVOKE
“.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.