Die Informationen zu Kontenberechtigungen sind in den Tabellen
user
, db
,
host
, tables_priv
,
columns_priv
und
procs_priv
in der
mysql
-Datenbank abgelegt. Der MySQL-Server
liest die Inhalte dieser Tabellen beim Start in den Speicher
ein. Unter den in Abschnitt 5.8.7, „Wann Berechtigungsänderungen wirksam werden“,
beschriebenen Umständen erfolgt zudem ein Neueinlesen der
Inhalte. Entscheidungen der Zugriffssteuerung basieren auf den
im Arbeitsspeicher vorhandenen Kopien der Grant-Tabellen.
Die in den Anweisungen GRANT
und
REVOKE
zur Bezeichnung von Berechtigungen
verwendeten Namen sind in der folgenden Tabelle aufgeführt.
Diese enthält außerdem Angaben zu dem mit der jeweiligen
Berechtigung in den Grant-Tabellen verknüpften Spaltennamen und
zum Kontext, in dem die Berechtigung gültig ist. Weitere
Informationen zur Bedeutung der einzelnen Berechtigungen können
Sie Abschnitt 13.5.1.3, „GRANT
und REVOKE
“, entnehmen.
Berechtigung | Spalte | Kontext |
CREATE |
Create_priv |
Datenbanken, Tabellen oder Indizes |
DROP |
Drop_priv |
Datenbanken oder Tabellen |
GRANT OPTION |
Grant_priv |
Datenbanken, Tabellen oder gespeicherte Routinen |
REFERENCES |
References_priv |
Datenbanken oder Tabellen |
EVENT |
Event_priv |
Datenbanken |
ALTER |
Alter_priv |
Tabellen |
DELETE |
Delete_priv |
Tabellen |
INDEX |
Index_priv |
Tabellen |
INSERT |
Insert_priv |
Tabellen |
SELECT |
Select_priv |
Tabellen |
UPDATE |
Update_priv |
Tabellen |
TRIGGER |
Trigger_priv |
Tabellen |
CREATE VIEW |
Create_view_priv |
Views |
SHOW VIEW |
Show_view_priv |
Views |
ALTER ROUTINE |
Alter_routine_priv |
gespeicherte Routinen |
CREATE ROUTINE |
Create_routine_priv |
gespeicherte Routinen |
EXECUTE |
Execute_priv |
gespeicherte Routinen |
FILE |
File_priv |
Dateizugriff auf dem Serverhost |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv |
Serveradministration |
LOCK TABLES |
Lock_tables_priv |
Serveradministration |
CREATE USER |
Create_user_priv |
Serveradministration |
PROCESS |
Process_priv |
Serveradministration |
RELOAD |
Reload_priv |
Serveradministration |
REPLICATION CLIENT |
Repl_client_priv |
Serveradministration |
REPLICATION SLAVE |
Repl_slave_priv |
Serveradministration |
SHOW DATABASES |
Show_db_priv |
Serveradministration |
SHUTDOWN |
Shutdown_priv |
Serveradministration |
SUPER |
Super_priv |
Serveradministration |
Einige Releases von MySQL enthalten Änderungen an der Struktur der Grant-Tabellen, damit neue Berechtigungen oder Funktionen hinzugefügt werden können. Wenn Sie ein Upgrade auf eine neue MySQL-Version durchführen, sollten Sie Ihre Grant-Tabellen aktualisieren, damit sichergestellt ist, dass diese auf der aktuellen Struktur basieren und auf diese Weise neue Funktionalitäten nutzen können. Siehe auch Abschnitt 5.6, „mysql_fix_privilege_tables — Upgrade von MySQL-Systemtabellen“.
Die Berechtigungen EVENT
und
TRIGGER
wurden in MySQL 5.1.6 hinzugefügt.
Um gespeicherte Funktionen zu erstellen oder zu verändern,
benötigen Sie bei aktiviertem binärem Loggen unter Umständen
auch die Berechtigung SUPER
(siehe auch
Beschreibung in Abschnitt 19.4, „Binärloggen gespeicherter Routinen und Trigger“).
Die Berechtigungen CREATE
und
DROP
gestatten Ihnen die Erstellung neuer
bzw. das Löschen vorhandener Datenbanken und Tabellen.
Wenn Sie einem Benutzer die Berechtigung
DROP
für die Datenbank
mysql
gewähren, kann dieser Benutzer die
Datenbank löschen, in der die MySQL-Zugriffsberechtigungen
gespeichert sind.
Die Berechtigungen SELECT
,
INSERT
, UPDATE
und
DELETE
gestatten Ihnen die Durchführung der
betreffenden Operationen an Datensätzen in vorhandenen Tabellen
einer Datenbank.
SELECT
-Anweisungen erfordern die Berechtigung
SELECT
nur dann, wenn Sie sie tatsächlich
Datensätze aus eine Tabelle abrufen. Einige
SELECT
-Anweisungen greifen nicht auf Tabellen
zu und können deswegen ohne Berechtigung für eine bestimmte
Datenbank ausgeführt werden. So können Sie etwa den Client
mysql als einfachen Taschenrechner zur
Auswertung von Ausdrücken verwenden, die keine Tabellen
referenzieren:
SELECT 1+1; SELECT PI()*2;
Die Berechtigung INDEX
erlaubt Ihnen das
Erstellen und Löschen von Indizes. INDEX
gilt für vorhandene Tabellen. Wenn Sie die Berechtigung
CREATE
für eine Tabelle haben, können Sie
Indexdefinitionen in die CREATE
TABLE
-Anweisung einfügen.
Die Berechtigung ALTER
gestattet es Ihnen,
mit ALTER TABLE
die Struktur einer Tabelle zu
ändern oder die Tabelle umzubenennen.
Die Berechtigung CREATE ROUTINE
ist zur
Erstellung gespeicherter Routinen (Funktionen und Prozeduren)
erforderlich. Die Berechtigung ALTER ROUTINE
benötigen Sie zum Ändern oder Löschen gespeicherter Routinen
und die Berechtigung EXECUTE
für deren
Ausführung.
Die Berechtigung TRIGGER
erlaubt Ihnen das
Erstellen und Löschen von Triggern. Sie benötigen diese
Berechtigung für eine Tabelle, um Trigger für diese Tabelle
erstellen oder löschen zu dürfen. (Vor MySQL 5.1.6 erforderten
diese Operationen die Berechtigung SUPER
.)
Die Berechtigung EVENT
erlaubt Ihnen die
Erstellung von Ereignissen im Ereignisplaner.
Mit der Berechtigung GRANT
können Sie
anderen Benutzern die Berechtigungen gewähren, die Sie selbst
besitzen. Sie kann für Datenbanken, Tabellen und gespeicherte
Routinen verwendet werden.
Die Berechtigung FILE
gibt Ihnen die
Erlaubnis, Dateien auf dem Serverhost mit den LOAD DATA
INFILE
- und SELECT ... INTO
OUTFILE
-Anweisungen zu lesen bzw. zu schreiben. Ein
Benutzer mit der Berechtigung FILE
kann jede
Datei auf dem Server lesen, die entweder von allen oder vom
MySQL-Server gelesen werden kann. (Daraus folgt, dass der
Benutzer jede Datei in jedem Datenbankverzeichnis lesen kann, da
der Server auf all diese Dateien zugreifen darf.) Die
Berechtigung FILE
erlaubt dem Benutzer auch
die Erstellung neuer Dateien in allen Verzeichnissen, auf die
der MySQL-Server Schreibzugriff hat. Der Server kann vorhandene
Dateien jedoch nicht überschreiben (dies ist eine
Sicherheitsmaßnahme).
Die verbleibenden Berechtigungen werden für administrative Operationen verwendet. Viele von ihnen können mit dem Programm mysqladmin oder durch Absetzen von SQL-Anweisungen ausgeführt werden. Die folgende Tabelle zeigt, die Ausführung welcher mysqladmin-Befehle mit den einzelnen administrativen Berechtigungen möglich ist:
Berechtigung | Für Berechtigte verfügbare Befehle |
RELOAD |
flush-hosts , flush-logs ,
flush-privileges ,
flush-status ,
flush-tables ,
flush-threads ,
refresh , reload
|
SHUTDOWN |
shutdown |
PROCESS |
processlist |
SUPER |
kill |
Der Befehl reload
weist den Server an, die
Grant-Tabellen erneut in den Speicher einzulesen.
flush-privileges
ist ein Synonym für
reload
. Der Befehl refresh
schließt die Logdateien und öffnet sie dann neu und schreibt
zudem alle Tabellen neu auf Festplatte. Die übrigen
flush-
-Befehle
führen Funktionen aus, die xxx
refresh
ähneln,
sind aber spezieller und in bestimmten Fällen vorzuziehen. Wenn
Sie beispielsweise nur die Logdateien neu schreiben wollen, ist
flush-logs
eine bessere Wahl als
refresh
.
Der Befehl shutdown
fährt den Server
herunter. Eine entsprechende SQL-Anweisung gibt es nicht.
Der Befehl processlist
zeigt Informationen zu
den Threads an, die auf dem Server ausgeführt werden (und somit
auch zu den Anweisungen, die von den Clients ausgeführt
werden). Der Befehl kill
terminiert
Server-Threads. Eigene Threads können Sie immer anzeigen oder
terminieren; zum Anzeigen von Threads, die von anderen Benutzern
gestartet wurden, benötigen Sie die Berechtigung
PROCESS
und zum Terminieren solcher Threads
die Berechtigung SUPER
. Siehe auch
Abschnitt 13.5.5.3, „KILL
“.
Die Berechtigung CREATE TEMPORARY TABLES
ermöglicht die Verwendung des Schlüsselwortes
TEMPORARY
in CREATE
TABLE
-Anweisungen.
Die Berechtigung LOCK TABLES
gestattet die
Verwendung expliziter LOCK TABLES
-Anweisungen
zum Sperren von Tabellen, für die Sie die Berechtigung
SELECT
haben. Dies umfasst auch das Setzen
von Schreibsperren, wodurch das Lesen der Tabellen durch andere
unterbunden wird.
Die Berechtigung REPLICATION CLIENT
ermöglicht die Verwendung von SHOW MASTER
STATUS
und SHOW SLAVE STATUS
.
Die Berechtigung REPLICATION SLAVE
sollte
Konten gewährt werden, die von Slave-Servern zum Herstellen
einer Verbindung mit dem aktuellen Server als Master verwendet
werden. Ohne diese Berechtigung kann der Slave keine Updates
anfordern, die an den Datenbanken auf dem Master-Server
vorgenommen wurden.
Die Berechtigung SHOW DATABASES
ermöglicht
dem Konto die Anzeige von Datenbanknamen durch Absetzen einer
SHOW DATABASE
-Anweisung. Konten, die diese
Berechtigung nicht haben, sehen nur solche Datenbanken, für die
sie Berechtigungen haben; wurde der Server mit der Option
--skip-show-database
gestartet, dann kann die
Anweisung überhaupt nicht verwendet werden. Beachten Sie, dass
jede globale Berechtigung eine Berechtigung
für die Datenbank ist.
Es empfiehlt sich deswegen, einem Konto nur diejenigen
Berechtigungen zu gewähren, die es tatsächlich braucht.
Besondere Vorsicht sollten Sie bei Gewährung der Berechtigung
FILE
sowie administrativer Berechtigungen
walten lassen:
Die Berechtigung FILE
kann missbraucht
werden, um beliebige Dateien, die der MySQL-Server auf dem
Serverhost lesen kann, in eine Datenbanktabelle einzulesen.
Dies betrifft alle World-Readable-Dateien sowie Dateien im
Datenverzeichnis des Servers. Die Tabelle kann dann mit
SELECT
aufgerufen und ihr Inhalt an den
Clienthost übertragen werden.
Die Berechtigung GRANT
gestattet
Benutzern, ihre Berechtigungen an andere Benutzer
weiterzugeben. Zwei Benutzer, die unterschiedliche
Berechtigungen haben und beide über die Berechtigung
GRANT
verfügen, können ihre
Berechtigungen kombinieren.
Die Berechtigung ALTER
kann verwendet
werden, um das Berechtigungssystem durch Umbenennen zu
unterlaufen.
Die Berechtigung SHUTDOWN
kann verwendet
werden, um durch Herunterfahren des Servers anderen
Benutzern Dienste vollständig zu verweigern.
Mit der Berechtigung PROCESS
kann man
aktuell ausgeführte Anweisungen einschließlich solcher,
mit denen Passwörter eingestellt oder geändert werden,
unverschlüsselt anzeigen.
Mit der Berechtigung SUPER
schließlich
lassen sich andere Clients terminieren und die Betriebsweise
des Servers ändern.
Berechtigungen, die für die
mysql
-Datenbank selbst gewährt wurden,
können zum Ändern von Passwörtern und anderen Daten
benutzt werden, die für Zugriffsberechtigungen relevant
sind. Passwörter werden verschlüsselt gespeichert, d. h.
ein arglistiger Benutzer kann sie nicht einfach im Klartext
auslesen. Allerdings kann ein Benutzer mit Schreibzugriff
auf die Spalte Password
der Tabelle
user
das Passwort eines Kontos ändern
und dann unter Verwendung dieses Kontos eine Verbindung mit
dem MySQL-Server herstellen.
Es gibt aber auch einige Dinge, die Sie mit dem MySQL-Berechtigungssystem nicht tun können:
Sie können nicht explizit angeben, dass einem bestimmten Benutzer der Zugriff verweigert werden soll. Anders gesagt ist es nicht möglich, einen Benutzervergleich durchzuführen und bei Übereinstimmung die Verbindung zu verweigern.
Sie können nicht festlegen, dass ein Benutzer Berechtigungen zum Erstellen oder Löschen von Tabellen in einer Datenbank hat, aber die Datenbank selbst nicht erstellen bzw. löschen darf.
Ein Passwort gilt immer global für ein Konto. Sie können kein Passwort für ein bestimmtes Objekt wie eine Datenbank, eine Tabelle oder eine Routine vergeben.
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.