Wird oft vergessen: Änderungen der Zugriffsberechtigungen werden erst nach mysqladmin reload wirksam!
Befugnisse:
| Select_priv | |
| Insert_priv | |
| Update_priv | |
| Delete_priv | |
| Create_priv | |
| Drop_priv | Löschen |
| Reload_priv | mysqladmin (reload, refresh, flush) |
| Shutdown_priv | mysqladmin shutdown |
| Process_priv | mysqladmin (processlist, kill) |
| File_priv | LOAD DATA INFILE / SELECT ... INTO OUTFILE |
| Grant_priv | Rechte, die man selbst besitzt weitergeben |
| References_priv | ??? |
| Index_priv | Indexe anlegen / entfernen |
| Alter_priv | Alter-Kommando |
| ... | es werden mit jeder MySQL-Version einige mehr ;-) |
eindeutige Benutzeridentität: ist stets Kombination
Die MySQL-Usernamen (und Paßwörter) haben nichts mit dem UNIX-Nutzerkennzeichen zu tun!
Die Befugnisse stehen in der Datenbank namens mysql.
mysql> use mysql;
Database changed
mysql> show tables;
+-----------------+
| Tables in mysql |
+-----------------+
| db |
| host |
| user |
| ... |
+-----------------+
User-Table:
+-----------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| User | char(16) | | PRI | | |
| Password | char(16) | | | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Reload_priv | enum('N','Y') | | | N | |
| Shutdown_priv | enum('N','Y') | | | N | |
| Process_priv | enum('N','Y') | | | N | |
| File_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
.......
+-----------------+---------------+------+-----+---------+-------+
+---------------------------+-----------------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | ...
+---------------------------+-----------------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+----
| localhost | root | 2f9b467b34cb9958 | Y | Y | Y | Y | Y | Y | ...
| localhost | urzdb | 6d6f73ad12ae8963 | N | N | N | N | N | N | ...
| localhost | reqadmin | 66c28af551e2ddb0 | N | N | N | N | N | N | ...
| %.tu-chemnitz.de | reqadmin | 66c28af551e2ddb0 | N | N | N | N | N | N | ...
| localhost | req_read | 52c0a4ea6e6d9ab5 | N | N | N | N | N | N | ...
| %.tu-chemnitz.de | req_read | 52c0a4ea6e6d9ab5 | N | N | N | N | N | N | ...
...........
DB-Table:
+-----------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| Db | char(32) | | PRI | | |
| User | char(16) | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
........
+-----------------+---------------+------+-----+---------+-------+
+------------------+-------------+-----------+-------------+-------------+-------------+-------------+-------------+-----------+-
| Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | ...
+------------------+-------------+-----------+-------------+-------------+-------------+-------------+-------------+-----------+-
| localhost | urz | urzdb | Y | Y | Y | Y | Y | Y | ...
| localhost | urz | hrzall | Y | N | N | N | N | N | ...
| localhost | urz_req | reqadmin | Y | Y | Y | Y | Y | Y | ...
| localhost | urz_req | req_read | Y | N | N | N | N | N | ...
| localhost | urz_req | req_write | Y | Y | Y | N | N | N | ...
| %.tu-chemnitz.de | urz_req | req_read | Y | N | N | N | N | N | ...
| %.tu-chemnitz.de | urz_req | reqadmin | Y | Y | Y | Y | Y | Y | ...
| %.tu-chemnitz.de | urz_req | req_write | Y | Y | Y | N | N | N | ...
.......
In den Tabellen user und db kann für Host folgendes angegeben werden:
Wird Host frei gelassen, bedeutet das: "schau in die Host-Tabelle"
MySQL prüft:
Abfragen werden damit aber relativ zeitaufwendig.
MySQL-Admins können die Zugriffsbefugnisse mit den Komammndos grant und revoke verwalten.
Ob dies - wie oft beschrieben - einfacher ist, sei dahingestellt.
Wenn man alle benutzten Grant- und Revoke-Kommandos in einer Datei abspeichert, sind Wechsel der MySQL-Version einfacher. Die o.g. Tabellen können nicht zwischen den MySQL-Versionen übertragen werden (auch nicht als Text-File), da sich die Tabellenstruktur üblicherweise beim Wechsel der MySQL-Version ändert.
Dietmar
Grunewald
Oktober 2006