Eine wesentliche Komponente des MySQL-Installationsprozesses ist
die Einrichtung der mysql-Datenbank, die die
Grant-Tabellen enthält:
Windows-Distributionen enthalten vorinitialisierte Grant-Tabellen, die automatisch installiert werden.
Unter Unix werden die Grant-Tabellen durch das Programm mysql_install_db ausgefüllt. Einige Installationsmethoden führen dieses Programm für Sie aus. Andere wiederum erfordern eine manuelle Ausführung. Detaillierte Informationen finden Sie in Abschnitt 2.9.2, „Schritte nach der Installation unter Unix“.
Die Grant-Tabellen definieren die vorgabeseitigen MySQL-Benutzerkonten und deren Zugriffsberechtigungen. Diese Konten werden wie folgt eingerichtet:
Es werden Konten mit dem Benutzernamen
root erstellt. Dies sind
Superuser-Konten, die alles dürfen. Anfänglich sind die
Passwörter der root-Konten leer, d. h.,
jeder kann als root —
ohne Passwort — eine Verbindung
mit dem MySQL Server herstellen und erhält alle
Berechtigungen.
Unter Windows wird genau ein
root-Konto erstellt. Dieses erlaubt
nur eine Verbindung über den lokalen Host. Das
Windows-Installationsprogramm erstellt optional ein
Konto, welches Verbindung von beliebigen Hosts
ermöglicht. Dieses Konto wird jedoch nur dann angelegt,
wenn die Option Enable root access from remote
machines während der Installation gewählt
wurde.
Unter Unix sind beide root-Konten
für Verbindungen vom lokalen Host vorgesehen.
Verbindungen vom lokalen Host müssen unter Angabe von
localhost für das eine Konto bzw.
des tatsächlichen Hostnamens oder der IP-Nummer für
das andere Konto hergestellt werden.
Es werden zwei Konten für anonyme Benutzer erstellt; bei beiden ist der Benutzername leer. Die anonymen Konten haben kein Passwort, d. h., jeder kann über sie eine Verbindung zum MySQL Server herstellen.
Unter Windows wird ein anonymes Konto für Verbindungen
vom lokalen Host eingerichtet. Es hat ebenso wie die
root-Konten alle Berechtigungen. Das
andere Konto ist für Verbindungen von beliebigen Hosts
vorgesehen und hat alle Berechtigungen für die
test-Datenbank und für alle
Datenbanken, deren Name auf test
beginnt.
Unter Unix sind beide anonymen Konten für Verbindungen
vom lokalen Host vorgesehen. Verbindungen vom lokalen
Host müssen unter Angabe von
localhost für das eine Konto bzw.
des tatsächlichen Hostnamens oder der IP-Nummer für
das andere Konto hergestellt werden. Diese Konten haben
alle Berechtigungen für die Datenbank
test und für alle Datenbanken, deren
Name mit test_ beginnt.
Wie bereits angemerkt, hat keines der Vorgabekonten ein Passwort. Das bedeutet, dass Ihre MySQL-Installation nicht geschützt ist, bis Sie etwas Entsprechendes unternehmen:
Wenn Sie verhindern wollen, dass Clients sich ohne Angabe eines Passworts als anonyme Benutzer anmelden können, sollten Sie entweder für jedes anonyme Konto ein Passwort einrichten oder die Konten ganz entfernen.
Allen MySQL-root-Konten sollten Sie
Passwörter zuweisen.
Die folgenden Angaben erläutern, wie Sie Passwörter für die
vorgegebenen MySQL-Konten erstellen – erst für die anonymen
Konten und dann für die root-Konten.
Ersetzen Sie „ newpwd “
in den Beispielen durch das Passwort, welches Sie verwenden
wollen. Die Erläuterungen behandeln auch die Frage, wie Sie die
anonymen Konten entfernen können, wenn Sie anonymen Zugriff
überhaupt nicht gestatten wollen.
Sie sollten die Einstellung der Passwörter auf einen späteren Zeitpunkt verschieben, damit Sie sie nicht angeben müssen, wenn Sie weitere Konfigurations- oder Testschritte durchführen. Achten Sie allerdings darauf, sie einzurichten, bevor Sie Ihre Installation für Produktionszwecke einsetzen.
Um Passwörter für anonyme Konten zu konfigurieren, stellen Sie
als root eine Verbindung zum Server her und
stellen das Passwort entweder mit SET
PASSWORD ein oder führen eine
UPDATE-Anweisung aus. In beiden Fällen
müssen Sie das Passwort mit der
PASSWORD()-Funktion verschlüsseln.
SET PASSWORD verwenden Sie unter Windows wie
folgt:
shell>mysql -u rootmysql>SET PASSWORD FOR ''@'localhost' = PASSWORD('mysql>newpwd');SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');
SET PASSWORD verwenden Sie unter Unix wie
folgt:
shell>mysql -u rootmysql>SET PASSWORD FOR ''@'localhost' = PASSWORD('mysql>newpwd');SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');
In der zweiten SET PASSWORD-Anweisung
ersetzen Sie host_name durch den
Namen des Serverhosts. Es handelt sich dabei um den Namen, den
Sie in der Spalte Host desjenigen
root-Datensatzes in der Tabelle
user angegeben haben, der nicht mit
localhost verknüpft wird. Wenn Sie diesen
Hostnamen nicht kennen, setzen Sie die folgende Anweisung vor
der Verwendung von SET PASSWORD ab:
mysql> SELECT Host, User FROM mysql.user;
Suchen Sie nach dem Datensatz, bei dem root
in der Spalte User und etwas anderes als
localhost in der Spalte
Host steht. Verwenden Sie dann diesen
Host-Wert in der zweiten SET
PASSWORD-Anweisung.
Die andere Möglichkeit, Passwörter für anonyme Konten
zuzuweisen, ist die Verwendung von UPDATE zur
direkten Modifizierung der Tabelle user.
Stellen Sie als root eine Verbindung zum
Server her und setzen Sie eine
UPDATE-Anweisung ab, die in der Spalte
Password der betreffenden Datensätze in der
Tabelle user einen Wert hinzufügt. Der
Vorgang ist bei Windows und Unix identisch. Die folgende
UPDATE-Anweisung weist beiden anonymen Konten
gleichzeitig ein Passwort zu:
shell>mysql -u rootmysql>UPDATE mysql.user SET Password = PASSWORD('->newpwd')WHERE User = '';mysql>FLUSH PRIVILEGES;
Wenn Sie die Passwörter in der Tabelle user
mit UPDATE direkt aktualisieren, müssen Sie
den Server mit FLUSH PRIVILEGES anweisen, die
Grant-Tabellen neu einzulesen. Andernfalls werden Ihre
Änderungen erst umgesetzt, wenn Sie den Server neu starten.
Wenn Sie die anonymen Konten stattdessen ganz entfernen wollen, gehen Sie wie folgt vor:
shell>mysql -u rootmysql>DELETE FROM mysql.user WHERE User = '';mysql>FLUSH PRIVILEGES;
Die DELETE-Anweisung gilt für Windows und
Unix gleichermaßen. Wenn Sie unter Windows nur das anonyme
Konto entfernen wollen, das die gleichen Berechtigungen wie
root hat, geben Sie stattdessen Folgendes
ein:
shell>mysql -u rootmysql>DELETE FROM mysql.user WHERE Host='localhost' AND User='';mysql>FLUSH PRIVILEGES;
Dieses Konto gewährt anonymen Zugriff, verfügt aber über Vollzugriff; insofern verbessern Sie die Sicherheit, wenn Sie es entfernen.
Sie können den root-Konten Passwörter auf
mehreren unterschiedlichen Wegen zuweisen. Im Folgenden wollen
wir drei Methoden demonstrieren:
Verwenden der SET PASSWORD-Anweisung
Verwenden des befehlszeilenbasierten Clientprogramms mysqladmin
Verwenden der UPDATE-Anweisung
Um Passwörter mit SET PASSWORD zuzuweisen,
stellen Sie als root eine Verbindung zum
Server her und setzen zwei SET
PASSWORD-Anweisungen ab. Beachten Sie dabei, dass Sie
das Passwort mit der PASSWORD()-Funktion
verschlüsseln müssen.
Unter Windows geben Sie Folgendes ein:
shell>mysql -u rootmysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mysql>newpwd');SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');
Unter Unix geben Sie Folgendes ein:
shell>mysql -u rootmysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mysql>newpwd');SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');
In der zweiten SET PASSWORD-Anweisung
ersetzen Sie host_name durch den
Namen des Serverhosts. Dies ist derselbe Hostname, den Sie bei
der Zuweisung der Passwörter für die anonymen Konten verwendet
haben.
Um für die root-Konten Passwörter mit
mysqladmin zu konfigurieren, führen Sie
folgende Befehle aus:
shell>mysqladmin -u root password "shell>newpwd"mysqladmin -u root -hhost_namepassword "newpwd"
Diese Befehle gelten für Windows und Unix gleichermaßen. Im
zweiten Befehl ersetzen Sie host_name
durch den Namen des Serverhosts. Die doppelten
Anführungszeichen, die das Passwort umgeben, sind nicht immer
erforderlich; Sie sollten sie aber verwenden, wenn das Passwort
Leerzeichen oder andere Zeichen enthält, die Ihr
Befehls-Interpreter als Sonderzeichen interpretiert.
Sie können auch mithilfe von UPDATE die
Tabelle user direkt bearbeiten. Die folgende
UPDATE-Anweisung weist beiden
root-Konten gleichzeitig ein Passwort zu:
shell>mysql -u rootmysql>UPDATE mysql.user SET Password = PASSWORD('->newpwd')WHERE User = 'root';mysql>FLUSH PRIVILEGES;
Die UPDATE-Anweisung gilt für Windows und
Unix gleichermaßen.
Nachdem die Passwörter konfiguriert wurden, müssen Sie immer, wenn Sie eine Serververbindung herstellen, das Passwort angeben. Wollen Sie also etwa mysqladmin zum Herunterfahren des Servers verwenden, dann tun Sie das mit folgendem Befehl:
shell>mysqladmin -u root -p shutdownEnter password:(enter root password here)
Hinweis: Wenn Sie Ihr
root-Passwort nach der Konfiguration
vergessen haben, finden Sie in
Abschnitt A.4.1, „Wie ein vergessenes Kennwort zurückgesetzt wird“, Informationen
dazu, wie Sie das Passwort zurücksetzen.
Um weitere Konten einzurichten, können Sie die Anweisung
GRANT verwenden. Informationen zur
Vorgehensweise finden Sie in Abschnitt 5.9.2, „Hinzufügen neuer MySQL-Benutzer“.
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.
