0251 / 590 644 - 0
info@a-coding-project.de

Administration von MySQL-Datenbanken

In MySQL kann der Administrator Berechtigungen für User auf ganz verschiedenen Ebenen vergeben. Dazu kann er Befehle eingeben, aber auch die entsprechenden Systemtabellen direkt pflegen.

Anlegen und Löschen von Datenbanken

Um eine neue MySQL-Datenbank anzulegen, reicht ein einziger Befehl:

CREATE DATABASE Datenbankname;

Wenn MySQL fehlerfrei installiert ist, gibt es allerdings schon eine Datenbank. Sie heißt mysql. In ihr sind die notwendigen Systemtabellen angelegt, ansonsten kann man damit umgehen wie mit jeder anderen Datenbank auch, also z.B. auch eigene Tabellen dort anlegen (sofern man die Rechte hat). Das ist aber nicht zu empfehlen. Besser ist es, für die eigenen Tabellen eine eigene Datenbank anzulegen.
Intern wird eine neue Datenbank in einem Unter-Ordner des mySQL-Ordners der MySQL-Installation gespeichert. Aber Finger weg von diesen Dateien! Außer mit MySQL selbst sollte man sie mit keinem anderen Werkzeug bearbeiten, da sonst schwerwiegende Inkonsistenzen entstehen können bis dahin, dass die Datenbank nicht mehr benutzbar und nicht mehr wiederherstellbar ist!
Das Löschen einer Datenbank erfolgt mit dem Befehl

DROP DATABASE DatenbankName;

Verwalten von Nutzern und Berechtigungen

Es gibt 2 Ebenen der Berechtigungen: die Datenbank-Ebene und die Betriebssystem-Ebene. Auf letzterer muss natürlich sichergestellt sein, dass der Benutzer die Rechte auf die entsprechenden Ordner (ggf. auch im Netzwerk) hat. Wir sprechen hier nur von der Datenbank-Ebene, die davon völlig unberührt ist.
In jeder Datenbank gibt es mindestens einen Benutzer: das ist der Eigentümer, also der, der sie angelegt hat. In mySQL heißt er "root" und hat kein Passwort.
Er hat alle Rechte. Er kann andere Benutzer anlegen und ihnen bestimmte Rechte zuteilen oder entziehen. Er kann auch anderen Benutzern Administrator-Rechte erteilen - sie können dann so wie er Benutzer anlegen und Rechte verwalten.
Das Verwalten von Benutzern und Rechten ist mit folgenden Befehlen möglich:

GRANT ALL PRIVILEGES ON *.* TO NeuerUser IDENTIFIED BY 'passwort';

Dies legt einen neuen Benutzer an. In unserem Beispiel werden dem Benutzer NeuerUser dabei alle Rechte erteilt. Analog wird ein Benutzer "unbrauchbar" gemacht, indem ihm mit dem REVOKE-Befehl alle Rechte entzogen werden. Der GRANT-Befehl kann auch nachträglich zum Zuweisen von Rechten benutzt werden:

GRANT Recht ON Was TO UserName;

Vergibt ein Recht. Dabei kann für Recht eingesetzt werden:
ALL PRIVILEGES, FILE, RELOAD, ALTER, INDEX, SELECT, CREATE, INSERT, SHUTDOWN, DELETE, PROCESS, UPDATE, DROP, REFERENCES, USAGE
Für Was kann ein Tabellenname oder Datenbankname.* (dann gilt das Recht für alle Tabellen dieser Datenbank) eingesetzt werden.
Der Zusatz WITH GRANT OPTION beim GRANT-Befehl bewirkt, dass der Benutzer seine Rechte an andere weitergeben darf.
Das Gegenteil von GRANT ist REVOKE. Mit REVOKE werden Rechte entzogen:

REVOKE Recht ON Was FROM UserName;

Ansonsten gilt für REVOKE das gleiche wie für GRANT.
In mySQL kann man einem User zunächst alle Rechte entziehen:

REVOKE ALL PRIVILEGES ON * FROM UserName;

um ihm dann gezielt wieder bestimmte Rechte zu erteilen. Um sich anzeigen zu lassen, welche Rechte jemand hat, gibt man den Befehl ein:

SHOW GRANTS FOR Benutzer;

Die Systemtabellen

Die Berechtigungen sind in der Datenbank mysql in den Tabellen user, host, db, tables_priv und colums_priv gespeichert. Mit entsprechenden Rechten kann man diese Tabellen verwalten wie jede andere mySQL-Tabelle auch. Es ist allerdings Vorsicht geboten. Zum Beispiel führt ein Löschen der Datensätze dazu, dass mySQL nicht mehr verwendbar sein kann. Die Tabellen regeln die Berechtigungen auf unterschiedlichen Ebenen:

  • Tabelle User regelt welcher Benutzer sich von welchem Host aus mit welchem Passwort anmelden darf und welche globalen Rechte er dort hat.
  • Tabelle Host regelt welche Rechte die Benutzer auf den Datenbanken abhängig von dem Host, von dem aus sie sich anmelden, haben.
  • Tabelle db regelt welche Datenbanken ein User benutzen darf.
  • Tabelle tables_priv regelt welche Tabellen der Benutzer mit welchem Recht benutzen darf.
  • Tabelle columns_priv regelt welche Spalten welcher Tabellen der Benutzer mit welchem Recht benutzen darf.

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Auch interessant