Passwörter können mit mysqladmin über die Befehlszeile zugewiesen werden:
shell> mysqladmin -u user_name
-h host_name
password "newpwd
"
Der Befehl setzt das Passwort des Kontos zurück, bei dessen
Datensatz in der Tabelle user
eine
Übereinstimmung mit user_name
in der
Spalte User
und eine Übereinstimmung des
Clienthosts, von dem aus Sie die Verbindung
herstellen, in der Spalte Host
vorliegt.
Eine weitere Möglichkeit, einem Konto ein Passwort zuzuweisen,
besteht im Absetzen einer SET
PASSWORD
-Anweisung:
mysql> SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');
Nur Benutzer wie root
, die die
mysql
-Datenbank aktualisieren dürfen,
können die Passwörter anderer Benutzer ändern. Sofern Sie
nicht als anonymer Benutzer verbunden sind, können Sie Ihr
eigenes Passwort durch Weglassen der
FOR
-Klausel ändern:
mysql> SET PASSWORD = PASSWORD('biscuit');
Sie können auch eine GRANT USAGE
-Anweisung
auf der globalen Ebene (ON *.*
) verwenden, um
einem Konto ein Passwort zuzuweisen, ohne die aktuellen
Berechtigungen dieses Kontos zu beeinträchtigen:
mysql> GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
Zwar ist die Zuweisung von Passwörtern unter Verwendung einer
der zuvor beschriebenen Methoden generell vorzuziehen, aber Sie
können die Tabelle user
auch direkt ändern:
Um bei Erstellung eines neuen Kontos ein Passwort
zuzuweisen, setzen Sie einen Wert in die Spalte
Password
:
shell>mysql -u root mysql
mysql>INSERT INTO user (Host,User,Password)
->VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql>FLUSH PRIVILEGES;
Wollen Sie das Passwort eines vorhandenen Kontos ändern,
dann weisen Sie mit UPDATE
den
Password
-Spaltenwert zu:
shell>mysql -u root mysql
mysql>UPDATE user SET Password = PASSWORD('bagel')
->WHERE Host = '%' AND User = 'francis';
mysql>FLUSH PRIVILEGES;
Wenn Sie einem Konto mit SET PASSWORD
,
INSERT
oder UPDATE
ein
nichtleeres Passwort zuweisen, müssen Sie die Funktion
PASSWORD()
zur Verschlüsselung verwenden.
PASSWORD()
ist erforderlich, weil die Tabelle
user
Passwörter nicht als Klartext, sondern
in verschlüsselter Form speichert. Wenn Sie dies vergessen,
werden Sie Passwörter wahrscheinlich so einstellen:
shell>mysql -u root mysql
mysql>INSERT INTO user (Host,User,Password)
->VALUES('%','jeffrey','biscuit');
mysql>FLUSH PRIVILEGES;
Die Folge ist, dass der literale Wert
'biscuit'
und nicht der verschlüsselte Wert
als Passwort in der Tabelle user
gespeichert
wird. Wenn jeffrey
dann unter Angabe dieses
Passworts eine Verbindung zum Server herzustellen versucht, wird
der Wert verschlüsselt und dann mit dem in der Tabelle
user
gespeicherten Wert verglichen. Dieser
gespeicherte Wert ist jedoch der literale String
'biscuit'
– der Vergleich schlägt fehl,
und der Server weist die Verbindungsanfrage ab:
shell> mysql -u jeffrey -pbiscuit test
Access denied
Bei der Zuweisung von Passwörtern mit der Anweisung
GRANT ... IDENTIFIED BY
oder dem Befehl
mysqladmin password wird die Verschlüsselung
des Passworts automatisch erledigt. In diesen Fällen ist die
Verwendung der Funktion PASSWORD()
nicht
erforderlich.
Hinweis: Die
PASSWORD()
-Verschlüsselung unterscheidet
sich von der Unix-Passwortverschlüsselung. Siehe auch
Abschnitt 5.9.1, „MySQL-Benutzernamen und -Kennwörter“.
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.