MySQL ist eine der in Open Source Welt sehr verbreitete Datenbank. Teilweise liegt das sicher auch daran, dass sie unter diversen Linux-Distributionen sehr einfach zu installieren ist oder sogar direkt mit installiert wird.
Nach dem Installieren steht man dann aber mit einem tollen, laufenden Daemon da. Wie fängt man an?
- Wie setzt man das Passwort für den Datenbank-Admin „root“?
- Wie greift man auf den Datenbank-Dienst zu?
- Wie legt man eine neue Datenbank an?
- Wie legt man neue User an?
- Wie setzt man Berechtigungen für diese User?
Das steht eigentlich alles auch in der Dokumentation drin – aber dummerweise in Form einer Befehls-Referenz, so dass man eigentlich schon wissen oder ahnen muss, wonach man genau sucht, um auch fündig zu werden.
Also – wie fängt man an?
Diese Beschreibung gilt für eine frische Installation unter Debian Linux, wird sich aber bei anderen Linux-Distributionen vermutlich nur in Details unterscheiden.
Schritt 1: Ein Passwort für den Datenbank-Admin „root“
Nach der Installation mit apt-get oder aptitude hat der Datenbank-Admin noch kein Passwort. Das sollte man schnellstens ändern, indem man an der Shell das Tool „mysqladmin“ aufruft:
# mysqladmin -u root password [NEUES-PASSWORT]
Schritt 2: Einloggen auf der Datenbank
Zum Zugriff auf der Datenbank gibt es das Client Programm „mysql„. Als Parameter übergibt man diesem den Usernamen und die Information, dass man sich mit einem Passwort einloggen möchte. Wenn man auf eine bestimmte Datenbank auf dem Server zugreifen möchte, so gibt man auch deren Namen als Parameter mit.
# mysql -u root -p
Nach dem Einloggen sieht das ganze eigentlich nicht viel anders aus als eine ganz normale Shell. Auf den ersten Blick wirkt nur vielleicht der Eingabeprompt etwas befremdlich („mysql>“). An dieser Stelle werden jetzt aber SQL-Befehle an den DB-Server übergeben. Die Befehle müssen jeweils mit einem Semikolon „;“ abgeschlossen werden. Wenn man nur Return drückt, so kann man den SQL-Befehl auf mehrere Zeilen weiterschreiben, bis eben ein Semikolon kommt.
Schritt 3: Das Anlegen einer neuen Datenbank
Eine neue Datenbank legt man an, indem man sich mittels „mysql“ in die Datenbank einloggt und dann den SQL-Befehl „CREATE DATABASE“ verwendet.
(Man kann auch über „mysqladmin“ eine neue Datenbank anlegen. Ich bevorzuge aber den Weg über den SQL-Befehl.)
mysql> CREATE DATABASE neuedatenbank;
CREATE DATABASE kann noch einen Haufen weitere Parameter annehmen (Beispielsweise die Zeichencodierung). Diese sind in der Dokumentation zu finden.
Schritt 4: Das Anlegen eines neuen Datenbank-Users
User legt man konsequenterweise mit dem ähnlich klingenden Befehl „CREATE USER“ an:
mysql> CREATE USER neueruser@localhost
IDENTIFIED BY 'neuespasswort';
Schritt 5: Zugriffsberechtigungen in MySQL setzen
Danach muss man dem User noch Rechte auf die Datenbank geben. Das geht mit dem Befehl „GRANT„:
mysql> GRANT ALL ON neuedatenbank.* TO neueruser@localhost;
Damit hat der User ALLE Rechte auf der entsprechenden Datenbank. Alternativ kann man ihm auch beispielsweise nur SELECT und INSERT („SELECT, INSERT“ statt „ALL“) oder auch nur Zugriff auf eine bestimmte Tabelle erlauben („neuedatenbank.tabelle“ statt „neuedatenbank.*“)
Danach ist es sinnvoll erst mal den Befehl „FLUSH PRIVILEGES;“ abzufeuern, damit auch sichergestellt wird, dass die neu angelegten Zugriffsberechtigungen auch auf jeden Fall gelesen werden.
Schritt 6: Tools zur Administration
Zum Loslegen ist das erst mal genug. Ich würde danach möglichst schnell auf ein Admin-Werkzeug wie beispielsweise phpMyAdmin (PHP-basierte Weboberfläche) oder HeidiSQL (Windows) umsatteln, weil die Bedienung über die Konsole etwas mühselig ist.
Wenn man von Extern auf die Datenbank zugreifen will (beispielsweise über den Windows Client HeidiSQL), so muss man die Datenbank auf eine externe IP lauschen lassen. Das stellt man in der MySQL-Konfiguration my.cnf ein. Für „Produktivsysteme“ würde ich aus Sicherheitsgründen davon aber abraten, so lange diese IP für jeden aus dem Internet zugänglich ist. Für Entwicklungs-Systeme im hausinternen Netzwerk gilt diese Einschränkung natürlich nicht.
Ausserdem muss natürlich auch ein User existieren, der sich von extern einloggen kann. User neueruser@localhost könnte das nicht, da er ja dann nicht von localhost käme.