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 mysqlmysql>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 mysqlmysql>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 mysqlmysql>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.
