Es gibt zwei Vorgehensweisen zum Hinzufügen von MySQL-Konten:
Verwenden von Anweisungen zur Erstellung von Konten (z. B.
CREATE USER oder
GRANT)
direktes Modifizieren der MySQL-Grant-Tabellen mit
Anweisungen wie INSERT,
UPDATE oder DELETE
Die zu bevorzugende Methode ist die Verwendung von Anweisungen
zur Kontenerstellung, denn diese sind knapper und zudem weniger
fehleranfällig. CREATE USER und
GRANT sind in Abschnitt 13.5.1.1, „CREATE USER“,
und Abschnitt 13.5.1.3, „GRANT und REVOKE“, beschrieben.
Eine weitere Option zur Erstellung von Konten besteht in der
Verwendung eines der vielen erhältlichen
Drittanbieterprogramme, die Funktionen zur
MySQL-Kontenverwaltung anbieten. phpMyAdmin
ist ein solches Programm.
Die folgenden Beispiele zeigen, wie man mit dem
mysql-Client neue Benutzer einrichtet. Die
Beispiele setzen voraus, dass die Berechtigungen entsprechend
der Beschreibung in Abschnitt 2.9.3, „Einrichtung der anfänglichen MySQL-Berechtigungen“, auf
die Vorgabewerte gesetzt sind. Das bedeutet, dass Sie, um
Änderungen vornehmen zu können, eine Verbindung zum
MySQL-Server als MySQL-Benutzer root
herstellen müssen und das root-Konto die
Berechtigung INSERT für die
mysql-Datenbank sowie die administrative
Berechtigung RELOAD benötigt.
Verwenden Sie zunächst das Programm mysql,
um als MySQL-Benutzer root eine Verbindung
zum Server herzustellen:
shell> mysql --user=root mysql
Wenn Sie für das Konto root ein Passwort
konfiguriert haben, müssen Sie auch eine Option
--password bzw. -p für diesen
und alle weiteren in diesem Abschnitt folgenden
mysql-Befehle angeben.
Wenn Sie die Verbindung zum Server als root
hergestellt haben, können Sie neue Konten hinzufügen. Die
folgenden Anweisungen richten mit GRANT vier
neue Benutzerkonten ein:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'->IDENTIFIED BY 'some_pass' WITH GRANT OPTION;mysql>GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'->IDENTIFIED BY 'some_pass' WITH GRANT OPTION;mysql>GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';mysql>GRANT USAGE ON *.* TO 'dummy'@'localhost';
Die mit diesen GRANT-Anweisungen erstellten
Konten haben die folgenden Eigenschaften:
Zwei der Konten haben den Benutzernamen
monty und das Passwort
some_pass. Beide Konten sind
Superuser-Konten mit allen Berechtigungen für beliebige
Operationen. Eines der Konten
('monty'@'localhost') kann nur für eine
Verbindung vom lokalen Host verwendet werden. Das andere
Konto ('monty'@'%') erlaubt die
Verbindung von einem beliebigen anderen Host. Beachten Sie,
dass beide Konten erforderlich sind, damit
monty von einem beliebigen Host aus als
monty eine Verbindung herstellen kann.
Würde das localhost-Konto nicht
eingerichtet, dann hätte das anonyme Benutzerkonto für
localhost, welches von
mysql_install_db eingerichtet wird,
Vorrang für die Anmeldung von monty am
lokalen Host. Die Folge wäre, dass monty
als anonymer Benutzer behandelt würde. Grund hierfür ist,
dass das Konto für anonyme Benutzer einen spezifischeren
Wert in der Host-Spalte aufweist als das
Konto 'monty'@'%' und deswegen in der
Tabelle user weiter oben einsortiert
wird. (Die Sortierung der Tabelle user
ist in Abschnitt 5.8.5, „Zugriffskontrolle, Phase 1: Verbindungsüberprüfung“, beschrieben.)
Ein Konto hat den Benutzernamen admin und
kein Passwort. Dieses Konto kann nur für eine Verbindung
vom lokalen Host verwendet werden. Gewährt werden die
administrativen Berechtigungen RELOAD und
PROCESS. Diese Berechtigungen gestatten
dem Benutzer admin die Ausführung der
Befehle mysqladmin reload,
mysqladmin refresh und
mysqladmin
flush-xxx sowie des
Befehls mysqladmin processlist . Für den
Zugriff auf Datenbanken werden keine Berechtigungen
gewährt. Sie können solche Berechtigungen später durch
Absetzen zusätzlicher GRANT-Anweisungen
hinzufügen.
Ein Konto hat den Benutzernamen dummy und
kein Passwort. Dieses Konto kann nur für eine Verbindung
vom lokalen Host verwendet werden. Es werden keine
Berechtigungen gewährt. Die Berechtigung
USAGE in der
GRANT-Anweisung erlaubt Ihnen die
Erstellung eines Kontos ohne Gewährung von Berechtigungen.
Es werden also alle globalen Berechtigungen auf
'N' gesetzt. Es ist davon auszugehen,
dass Sie diesem Konto später gewisse Berechtigungen
gewähren werden.
Als Alternative zu GRANT können Sie
dieselben Konten auch direkt durch Absetzen von
INSERT-Anweisungen und ein nachfolgendes
Neuladen der Grant-Tabellen durch den Server mithilfe von
FLUSH PRIVILEGES erstellen:
shell>mysql --user=root mysqlmysql>INSERT INTO user->VALUES('localhost','monty',PASSWORD('some_pass'),->'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');mysql>INSERT INTO user->VALUES('%','monty',PASSWORD('some_pass'),->'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');mysql>INSERT INTO user SET Host='localhost',User='admin',->Reload_priv='Y', Process_priv='Y';mysql>INSERT INTO user (Host,User,Password)->VALUES('localhost','dummy','');mysql>FLUSH PRIVILEGES;
Der Grund für die Verwendung von FLUSH
PRIVILEGES bei der Erstellung von Konten mit
INSERT besteht darin, dass der Server zum
Neuladen der Grant-Tabellen angewiesen werden muss. Andernfalls
wird Ihre Änderung erst umgesetzt, wenn Sie den Server neu
starten. Bei GRANT ist das Absetzen von
FLUSH PRIVILEGES nicht erforderlich.
Die Funktion PASSWORD() wird bei
INSERT zur Verschlüsselung des Passwortes
verwendet. Die Anweisung GRANT verschlüsselt
das Passwort direkt, d. h. PASSWORD() ist
hier nicht erforderlich.
Die 'Y'-Werte aktivieren die Berechtigungen
für die Konten. Je nach MySQL-Version müssen Sie unter
Umständen eine unterschiedliche Anzahl von
'Y'-Werten in den ersten beiden
INSERT-Anweisungen verwenden. Für das
admin-Konto sollten Sie vielleicht eher die
besser lesbare erweiterte INSERT-Syntax unter
Verwendung von SET benutzen.
In der INSERT-Anweisung für das Konto
dummy sind nur die Spalten
Host, User und
Password in der Tabelle
user zugewiesene Werte. Keine der
Berechtigungsspalten wird explizit eingestellt, weswegen MySQL
ihnen allen den Standardwert 'N' zuweist.
Dies entspricht dem, was auch GRANT USAGE
tut.
Beachten Sie, dass es zur Einrichtung eines Superuser-Kontos
erforderlich ist, einen Eintrag in der Tabelle
user zu erstellen, bei dem die
Berechtigungsspalten auf 'Y' gesetzt sind.
Berechtigungen in der Tabelle user sind
global, d. h. es sind keine anderen Einträge in einer anderen
Grant-Tabelle erforderlich.
Die nächsten Beispiele erstellen drei Konten und gewähren
ihnen Zugang zu bestimmten Datenbanken. Alle haben den
Benutzernamen custom und das Passwort
obscure.
Um die Konten mit GRANT zu erstellen,
verwenden Sie die folgenden Anweisungen:
shell>mysql --user=root mysqlmysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP->ON bankaccount.*->TO 'custom'@'localhost'->IDENTIFIED BY 'obscure';mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP->ON expenses.*->TO 'custom'@'whitehouse.gov'->IDENTIFIED BY 'obscure';mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP->ON customer.*->TO 'custom'@'server.domain'->IDENTIFIED BY 'obscure';
Die drei Konten können wie folgt verwendet werden:
Das erste Konto kann auf die Datenbank
bankaccount zugreifen, dies allerdings
nur vom lokalen Host aus.
Das zweite Konto kann auf die Datenbank
expenses zugreifen, dies allerdings nur
vom Host whitehouse.gov aus.
Das dritte Konto kann auf die Datenbank
customer zugreifen, dies allerdings nur
vom Host server.domain aus.
Um die custom-Konten ohne
GRANT einrichten zu können, verwenden Sie
wie folgt INSERT-Anweisungen zur direkten
Änderung der Grant-Tabellen:
shell>mysql --user=root mysqlmysql>INSERT INTO user (Host,User,Password)->VALUES('localhost','custom',PASSWORD('obscure'));mysql>INSERT INTO user (Host,User,Password)->VALUES('whitehouse.gov','custom',PASSWORD('obscure'));mysql>INSERT INTO user (Host,User,Password)->VALUES('server.domain','custom',PASSWORD('obscure'));mysql>INSERT INTO db->(Host,Db,User,Select_priv,Insert_priv,->Update_priv,Delete_priv,Create_priv,Drop_priv)->VALUES('localhost','bankaccount','custom',->'Y','Y','Y','Y','Y','Y');mysql>INSERT INTO db->(Host,Db,User,Select_priv,Insert_priv,->Update_priv,Delete_priv,Create_priv,Drop_priv)->VALUES('whitehouse.gov','expenses','custom',->'Y','Y','Y','Y','Y','Y');mysql>INSERT INTO db->(Host,Db,User,Select_priv,Insert_priv,->Update_priv,Delete_priv,Create_priv,Drop_priv)->VALUES('server.domain','customer','custom',->'Y','Y','Y','Y','Y','Y');mysql>FLUSH PRIVILEGES;
Die ersten drei INSERT-Anweisungen fügen
Einträge in der Tabelle user hinzu, die dem
Benutzer custom die Verbindungsherstellung an
den verschiedenen Hosts unter Verwendung des betreffenden
Passwortes gestatten, gewähren aber keine globale
Berechtigungen (alle Berechtigungen erhalten den Standardwert
'N'). Die nachfolgenden drei
INSERT-Anweisungen fügen Einträge in der
Tabelle db hinzu, die
custom Berechtigungen für die Datenbanken
bankaccount, expenses und
customer unter der Voraussetzung gewähren,
dass der Zugriff vom angegebenen Host aus erfolgt. Wie bei der
direkten Änderung der Grant-Tabellen üblich, müssen Sie den
Server auch hier mit FLUSH PRIVILEGES zum
Neuladen der Grant-Tabellen anweisen, damit die Änderungen an
den Berechtigungen übernommen werden.
Wenn Sie einem bestimmten Benutzer den Zugriff von allen
Computern in einer bestimmten Domäne (z. B.
mydomain.com) gestatten wollen, können Sie
eine GRANT-Anweisung absetzen, die das
Jokerzeichen ‘%’ im Hostpart des
Kontennamens verwendet:
mysql>GRANT ...->ON *.*->TO 'myname'@'%.mydomain.com'->IDENTIFIED BY 'mypass';
Um das gleiche Ergebnis durch direkte Modifikation der Grant-Tabellen zu erzielen, tun Sie folgendes:
mysql>INSERT INTO user (Host,User,Password,...)->VALUES('%.mydomain.com','myname',PASSWORD('mypass'),...);mysql>FLUSH PRIVILEGES;
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.
