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