Ein MySQL-Konto wird durch einen Benutzernamen und den oder die Clienthosts definiert, von denen aus der Benutzer eine Verbindung zum Server herstellen kann. Ein Konto hat auch ein Passwort. Es gibt mehrere Unterschiede zwischen der Verwendung von Benutzernamen und Passwörtern unter MySQL und der Verwendung durch Ihr Betriebssystem:
Benutzernamen, die MySQL zu Authentifizierungszwecken
verwendet, haben nicht mit den von Windows oder Unix
eingesetzten Benutzernamen (Anmeldenamen) zu tun. Unter Unix
versuchen die meisten MySQL-Clients standardmäßig, eine
Anmeldung unter Verwendung des aktuellen Unix-Benutzernamens
als MySQL-Benutzername durchzuführen, aber dies dient
lediglich der Bequemlichkeit. Diese Voreinstellung kann ganz
einfach außer Kraft gesetzt werden, da Clientprogramme die
Angabe beliebiger Benutzernamen mit der Option
-u
bzw. --user
erlauben.
Da dies impliziert, dass jeder versuchen kann, unter
Verwendung eines beliebigen Benutzernamens eine
Serververbindung herzustellen, können Sie eine Datenbank
nur schützen, indem Sie für alle MySQL-Konten Passwörter
konfigurieren. Jeder, der einen Benutzernamen für ein Konto
angibt, welches über kein Passwort verfügt, kann
erfolgreich eine Verbindung zum Server herstellen.
MySQL-Benutzernamen dürfen bis zu 16 Zeichen lang sein.
Diese Beschränkung ist bei MySQL-Servern und -Clients fest
vorgegeben; sie durch Änderung der Tabellendefinitionen in
der mysql
-Datenbank zu umgehen,
funktioniert nicht.
Hinweis: Sie
sollten die Tabellen in der
mysql
-Datenbank grundsätzlich nicht auf
eine andere als die von MySQL AB vorgeschriebene, in
Abschnitt 5.6, „mysql_fix_privilege_tables — Upgrade von MySQL-Systemtabellen“, geschilderte
Weise ändern. Jeder Versuch, die Systemtabellen von MySQL
auf eine andere Weise zu ändern, führt zu undefiniertem
(und nicht unterstütztem!) Verhalten.
Die Benutzernamen des Betriebssystems haben überhaupt keine Beziehung zu den MySQL-Benutzernamen und können sogar eine ganz andere Maximallänge aufweisen. So sind etwa Unix-Benutzernamen normalerweise auf acht Zeichen beschränkt.
Auch haben MySQL-Passwörter nichts mit den Passwörtern zu tun, mit denen Sie sich an Ihrem Betriebssystem anmelden. Es gibt also keine notwendige Verbindung zwischen dem Passwort, mit dem Sie sich an einem Windows- oder Unix-Computer anmelden, und dem Passwort, das Sie für den Zugriff auf den MySQL-Server auf diesem Computer verwenden.
MySQL verschlüsselt Passwörter mit einem eigenen
Algorithmus. Diese Verschlüsselung unterscheidet sich von
der, die während des Anmeldevorgangs unter Unix eingesetzt
wird. Die MySQL-Passwortverschlüsselung ist identisch mit
der durch die SQL-Funktion PASSWORD()
implementierten. Die Unix-Passwortverschlüsselung hingegen
ist identisch mit der durch die SQL-Funktion
ENCRYPT()
implementierten. Details finden
Sie in den Beschreibungen zu den Funktionen
PASSWORD()
und
ENCRYPT()
in
Abschnitt 12.10.2, „Verschlüsselungs- und Kompressionsfunktionen“. Seit Version 4.1
verwendet MySQL eine stärkere Authentifizierungsmethode,
die während des Anmeldevorgangs einen besseren
Passwortschutz gewährleistet als frühere Versionen. Sie
ist auch dann sicher, wenn TCP/IP-Pakete abgefangen oder die
mysql
-Datenbank aufgezeichnet wird. (Bei
den früheren Versionen wurden die Passwörter zwar in
verschlüsselter Form in der Tabelle user
abgelegt, aber die Kenntnis des verschlüsselten
Passwortwertes konnte zur Verbindung mit dem MySQL-Server
bereits genügen.)
Wenn Sie MySQL installieren, werden einige Vorgabekonten in die
Grant-Tabellen eingetragen. Die Namen und Zugriffsberechtigungen
dieser Konten sind in Abschnitt 2.9.3, „Einrichtung der anfänglichen MySQL-Berechtigungen“,
beschrieben. Dort finden Sie auch eine Erläuterung, wie Sie
Passwörter für diese Konten konfigurieren. Nachfolgend werden
MySQL-Konten normalerweise mit Anweisungen wie
GRANT
oder REVOKE
eingerichtet, geändert und entfernt. Siehe auch
Abschnitt 13.5.1, „Anweisungen zur Benutzerkontenverwaltung“.
Wenn Sie über einen Befehlszeilenclient eine Verbindung mit einem MySQL-Server herstellen, sollten Sie den Benutzernamen und das Passwort des zu verwendenden Kontos angeben:
shell> mysql --user=monty --password=guess
db_name
Verwenden Sie lieber kurze Optionen, dann sieht der Befehl wie folgt aus:
shell> mysql -u monty -pguess
db_name
Zwischen der Option -p
und dem nachfolgenden
Passwortwert darf kein Leerzeichen
vorhanden sein. Siehe auch Abschnitt 5.8.4, „Verbinden mit dem MySQL-Server“.
Obige Befehle enthalten den Passwortwert in der Befehlszeile.
Dies kann ein Sicherheitsrisiko darstellen. Siehe auch
Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“. Um dieses Problem zu
umgehen, geben Sie die Option --password
bzw.
-p
ohne nachfolgenden Passwortwert an:
shell>mysql --user=monty --password
shell>db_name
mysql -u monty -p
db_name
Wenn die Passwortoption keinen Passwortwert enthält, zeigt das
Clientprogramm eine Eingabeaufforderung an und wartet auf die
Eingabe des Passworts. (In diesen Beispielen wird
db_name
nicht
als Passwort interpretiert, da es von der vorangegangenen
Passwortoption durch ein Leerzeichen getrennt ist.)
Auf manchen Systemen beschränkt die von MySQL zur Passworteingabe verwendete Bibliotheksroutine die Eingabe auf acht Zeichen. Dies ist ein Problem der Systembibliothek und nicht von MySQL. Intern beschränkt MySQL die Länge des Passworts nicht. Um dieses Problem zu umgehen, setzen Sie das MySQL-Passwort entweder auf einen Wert, der maximal acht Zeichen umfasst, oder legen es in einer Optionsdatei ab.
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.