Nehmen wir einmal an, dass wir in unserer Datenbank 'archiv' ein Gast-Konto benötigen. User 'gast' soll alles lesen, aber keine Änderungen vornehmen dürfen. Dazu geben wir den folgenden Befehl ein:
mysql> grant select on archiv.* to gast@localhost identified by ''; Query OK, 0 rows affected (0.01 sec)
Hinter 'grant' stehen zunächst einmal jene Rechte, welche wir dem entsprechenden User erteilen möchten. Typischerweise werden wir zwischen 'all', 'select,insert,update,delete' sowie 'select' wählen.
Danach (d.h. bei 'on') bestimmen wir die Datenbank(en) sowie die Tabelle(n). Die Kombination '*.*' bedeutet dabei, dass wir Rechte für sämtliche Datenbanken und Tabellen vergeben möchten; seien wir etwas vorsichtig mit den Sternen, damit wir später nicht 'blaue' Wunder erleben.
Mit 'to' legen wir fest, wer von den Rechten profitieren soll. Wir müssen uns merken, dass nebem dem User (z.B. 'gast') immer auch noch der Zugriff geografisch einzugrenzen ist. Im einfachsten Falle werden wir die Rechte für gast@localhost oder gast@'%' (beim zweiten Beispiel benötigen wir zwingend die Apostroph-Zeichen) festlegen. 'localhost' bedeutet nur jener Rechner, auf dem der Server installiert ist, das Prozentzeichen '%' dagegen umfasst die übrige Welt. Das kann eine IP-Adresse sein, oder auch nur ein bestimmter IP-Adressenbereich. Ebenfalls denkbar (und sinnvoll) ist die Angabe eines Domain- bzw. Rechnernamens (sofern ein DNS-Dienst zur Verfügung steht).
Ich gebe zu, unter Linux dürfte
'localhost' allgemein bekannt sein, aber fast jeder Windows-User
(bzw. Linux-Umsteiger) wird für eine solche Erklärung dankbar sein.
Und falls das alles zu kompliziert klingt, so helfen ganz sicher einige Beispiele:
mysql> grant all on archiv.* to up@localhost -> identified by 'secret' with grant option; Query OK, 0 rows affected (0.01 sec)
Wir geben dem User 'up@localhost' sämtliche Rechte in der Datenbank 'archiv'. Eine Anmeldung erfolgt mit dem Password 'secret' und der User 'up' kann seinerseits Rechte der Datenbank 'archiv' an andere Benutzer vergeben. Um dies zu prüfen, verlassen wir kurz die Konsole und melden uns mit 'mysql -u up -p -D archiv' erneut an. Nun kann 'up' weitere Rechte für die Datenbank 'archiv' vergeben:
Mit der Option '-D datenbank'
können wir beim Start direkt eine Datenbank aktivieren, was uns das
Kommando 'use archiv' erspart.
mysql> grant select on archiv.* to gast@'%'; Query OK, 0 rows affected (0.01 sec)
Der User 'up' kann für die Datenbank 'archiv' auch neue User anlegen; nicht aber für diese neuen User Passwörter vergeben, da dies Rechte in der Datenbank 'mysql' erfordert. Möglich ist aber, dass der neu angelegte User 'gast@localhost' jederzeit selber das eigene Passwort setzt bzw. ändert:
mysql> set password=Password('secret');