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 root
mysql>SET PASSWORD FOR ''@'localhost' = PASSWORD('
mysql>newpwd
');SET PASSWORD FOR ''@'%' = PASSWORD('
newpwd
');
SET PASSWORD
verwenden Sie unter Unix wie
folgt:
shell>mysql -u root
mysql>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 root
mysql>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 root
mysql>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 root
mysql>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 root
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('
mysql>newpwd
');SET PASSWORD FOR 'root'@'%' = PASSWORD('
newpwd
');
Unter Unix geben Sie Folgendes ein:
shell>mysql -u root
mysql>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 -h
host_name
password "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 root
mysql>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 shutdown
Enter 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.