Nach der Neuinstallation ist Ihr MySQL-System offen wie das
Brandenburger-Tor. Wenn Sie nun mit einem Netzwerk verbunden sind,
und auf Ihr Netzwerk auch von außerhalb zugegriffen werden kann
(Remote-Technik), dann haben Sie einen kritischen Punkt.
Theoretisch könnte Ihnen ein Fremder alle administrative Rechte
nehmen und Ihr System lahm legen.
Sie haben vorher schon einen Blick in die vorhandenen Tabellen
geworfen, diese Sie mit dem Benutzerkonto "root"
OHNE Passwort aufrufen konnten.
Sämtliche Zugriffsrechte und Benutzerkonten werden in MySQL in
Form einer dafür angelegten Datenbank verwaltet.
In diesen Tabellen stehen die Benutzernamen, die Passwörter und
die zugeteilten Rechte an den vorhandenen Datenbanken und Tabellen.
Schreib- und Leserechte werden mit so genannten "Flags" erteilt.
MySQL verwaltet die Benutzerkonten sowie die Rechtevergabe in einer
Datenbank mit dem sinnigen Namen mysql. In dieser Datenbank
finden Sie die folgenden Tabellen:
columns_priv |
In und mit der Tabelle vergeben Sie Zugriffsbeschränkungen auf einzelne
Tabellenspalten und die darauf anwendbaren Befehle
|
db |
In dieser Tabelle werdenZugriffsrechte für die gesamte Datenbank
gespeichert. Dort wird gespeichert, welcher Benutzer auf welche Datenbank
Zugriff hat und welche weiteren Rechte er darauf hat.
|
host |
Hier besteht die Möglichkeit einzelnen Rechnern, also
den Hosts, den Zugriff auf MySQL zu beschränken/verbieten.
|
user |
Hier werden die Benutzer mitsamt ihren Passwörtern eingetragen |
Mit dem Befehl mysqlshow bekommen Sie eine Liste aller verfügbaren
Datenbanken:
user@linux ~$
mysqlshow -u root -h localhost
+-----------+ | Databases | +-----------+ | mysql | | test | +-----------+
user@linux ~$
|
Wenn Sie nun die Tabelle user aus der Datenbank mysql auf dem
Bildschirm ausgeben lassen würden, dann hätten Sie folgende Einträge:
+-----------+--------+------------------+ | Host | User | Password | +-----------+--------+------------------+ | localhost | root | | | % | | | | localhost | | | | % | root | | | localhost | tbanus | 68d4f47c49a579c9 | +-----------+--------+------------------+
|
Kurz zur Erklärung:
Mit Localhost ist der Rechner gemeint, auf dem auch der MySQL-Server
installiert wurde. Wahrscheinlich der, vor dem Sie sitzen.
Das %-Zeichen ist ein Platzhalter für beliebige andere Rechner
In der Spalte User finden Sie zwei Benutzernamen den root und
eventuell finden Sie wo der Benutzer tbanus steht Ihren Vornamen.
Dies Bedeutet, dass es auf dem System einen Benutzer mit dem Namen
tbanus gibt. Da der Benutzer nicht mit einem Prozentzeichen
aufgelistet wird, kann dieser MySQL nicht von einem anderen Rechner
aus bedienen.
Die vier Zeilen, die den Administrator root betreffen, ergeben
alle Kombinationen, die notwendig sind, damit Sie sich als root
immer auch ohne Passwort von jedem System aus zugreifen können.
Das ist äußerst brisant und wird nun schnellstens abgestellt.
Als ersten Schritt vergeben Sie dem root ein Passwort.
Danach löschen Sie alle Datensätze, in denen Prozentzeichen oder
leere Datenfelder vorkommen. Erst dann ist Ihr System abgesichert.
Sie müssen sich nun ein sicheres Kennwort überlegen.
Verwenden Sie dabei bitte nicht Ihr Kennwort von root bei Linux
oder eines der anderen Benutzerkennwörter.
Die folgende Befehlszeile geben Sie in Ihrer Console ein, wobei Sie
das Wort "rootpasswort" durch Ihr Passwort ersetzen
user@linux ~$
mysqladmin -u root -h localhost password "rootpasswort"
|
Wenn nach der Bestätigung des Befehls nix passiert, dann hat es
geklappt. Wenn Sie nun als root auf eine Funktion zugreifen wollen und
nicht Ihr Passwort mit angeben mysql -u root geschieht
folgendes:
ERROR 1045: Access denied for user: ...
|
Verwenden Sie stattdessen mysql -u root -p, werden Sie nach
Ihrem Passwort gefragt. Nachdem Sie es eingegeben haben stehen Sie wieder im
Clienten.
Genau dort müssen Sie nun für folgende Schritte der Systemabsicherung
auch hin. Nun befolgen Sie bitte die folgenden Anweisungen:
Um die Datenbank MYSQL zu aktivieren, geben Sie den SQL-Befehl
USE mysql; ein. Anschließend verwenden Sie den Befehl
SELECT Host, User, Password FROM user;
und erhalten eine Liste von Datensätzen, die ähnlich der vorherigen
Tabelle aussehen sollte, nur das bei dem Benutzer root nun auch eine
Passwort-Kodierung aufgeführt ist.
Mit dem folgenden Befehl löschen Sie nun alle Datensätze, die zu einem
Teil leer sind oder ein Prozentzeichen besitzen
DELETE FROM user WHERE Host="%";
DELETE FROM user WHERE User="";
Das Ergebnis können Sie sich mit einem erneuten Aufruf von dem
SELECT Befehl anschauen.
Zu guter Letzt verlassen Sie den Client und starten den MySQL-Server
neu, damit die Änderungen übernommen werden.
user@linux ~$
mysqladmin -u root -h localhost -p reload
|
Dadurch wird das System neu initialisiert und ist ab sofort vor
anonymen Zugriff geschützt. Es können sich nun nur noch die Benutzer
root und in meinem Beispiel der Benutzer tbanus einloggen und damit
arbeiten, weil diese alleine Eingetragen sind.
Das folgende Listing zeigt Ihnen noch einmal alle Schritte der Reihe
nach, so dass Sie das Beispiel komplett nachvollziehen können:
user@linux ~$
mysqladmin -u root -h localhost password "rootpasswort"
|
user@linux ~$
mysql -u root -h localhost -p
Enter password: *******
|
Welcome to the MySQL monitor. Commands end with ; or \g Your MySQL connection id is 12 to server version 4.0.0 Type 'help;' or '\h' for help. Type '\c' to clear the buffer
mysql> USE mysql; Database changed mysql> SELECT Host, User, Password FROM user; +-----------+--------+------------------+ | Host | User | Password | +-----------+--------+------------------+ | localhost | root | 111e97222dab1dd7 | | % | | | | localhost | | | | % | root | | | localhost | tbanus | 68d4f47c49a579c9 | +-----------+--------+------------------+ 5 rows in set (0.03 sec)
mysql> DELETE FROM user WHERE Host="%"; Query OK, 2 rows affected (0,57 sec)
mysql> DELETE FROM user WHERE User=""; Query OK, 1 row affected (0,36 sec)
mysql> SELECT Host, User, Password FROM user; +----------+---------+------------------+ |Host | User | Password | +----------+---------+------------------+ |localhost | root | 111e97222dab1dd7 | |localhost | michael | 68d4f47c49a579c9 | +----------+---------+------------------+ 2 rows in set (0.01 sec)
mysql> quit Bye
user@linux ~$
mysqladmin -u root -h localhost -p reload
Enter password: *******
user@linux ~$
|
|