Wurde der Root Account des MySQL Servers beschädigt, gelöscht oder dessen Rechte falsch vergeben und somit ein Rootzugriff auf den Server nicht mehr möglich ist, kann der MySQL Server ohne Rechteverwaltung gestartet werden. Sämtliche Rechte und Zugriffsbeschränkungen des Servers und der Accounts werden damit ignoriert:
1 |
service mysql stop && mysqld_safe --skip-grant-tables & |
Jetzt ist ein Login für jeden MySQL Nutzer ohne Passwortabfrage auf dem Server möglich.
1 |
mysql -uroot |
Eine Übersicht der MySQL Nutzer, aktivierten Plugins und Passwort Hashes wird mit folgendem Befehl angezeigt:
1 |
select user,host from mysql.user; |
Der Root Account samt Konfiguration wird nun vollständig gelöscht:
1 2 3 |
DELETE FROM mysql.user WHERE user = 'root' AND host = 'localhost'; |
und neu erstellt (ohne Passwort, da das unix_socket_plugin aktiviert wird):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
INSERT INTO mysql.user SET user = 'root', host = 'localhost', password = Password(''), Select_priv = 'y', Insert_priv = 'y', Update_priv = 'y', Delete_priv = 'y', Create_priv = 'y', Drop_priv = 'y', Reload_priv = 'y', Shutdown_priv = 'y', Process_priv = 'y', File_priv = 'y', Grant_priv = 'y', References_priv = 'y', Index_priv = 'y', Alter_priv = 'y', Show_db_priv = 'y', Super_priv = 'y', Create_tmp_table_priv = 'y', Lock_tables_priv = 'y', Execute_priv = 'y', Repl_slave_priv = 'y', Repl_client_priv = 'y', Create_view_priv = 'y', Show_view_priv = 'y', Create_routine_priv = 'y', Alter_routine_priv = 'y', Create_user_priv = 'y', Event_priv = 'y', Trigger_priv = 'y', Create_tablespace_priv = 'y'; flush privileges; Exit; |
Der MySQL Root Account ist jetzt nur noch ohne Passworteingabe über eine Root Shell erreichbar.
1 |
sudo mysql -u root |
Das Unix Socket Plugin
Die Aktivierung des Unix Socket Plugins für den MySQL Root Account hat zur Folge, dass ein MySQL Root Login nur noch über die Root Shell möglich ist. Der Vorteil ist ein Login über eine Root Shell ohne Passworteingabe (außer der für die Root Shell). Dafür ist ein Login über phpAdmin / Adminer oder ein direkter Login über den MySQL Port als Root nicht mehr möglich. Eine Re/Aktivierung des Unix_socket Plugins für den Root Account sowie das Deaktivieren des Root Passwortes kann mit folgenden Befehlen erreicht werden:
1 2 3 4 5 |
sudo mysql -u root SET PASSWORD FOR root@localhost=PASSWORD(''); select user,host,password,plugin from mysql.user; update mysql.user set plugin='unix_socket' where user='root'; flush privileges; |
Zweiten Root Account für Passwort Logins
Aufgrund einiger Systemroutinen des Debian Host OS, die einen MySQL Root Account ohne Passwort, dafür aber mit aktivierten Unix Socket Plugin benötigen, ist die Passwortvergabe für den Root Account nicht ratsam. Um das phpMyAdmin / Adminer Frontend in Verbindung mit dem MySQL Server und Root Rechten nutzen zu können benötigt phpMyAdmin / Adminer jedoch einen passwortgeschützten Root Account und Zugriff über das Loop Back Interface (Host = 127.0.0.1) oder die IP (Host = %) statt der MySQL Socket Datei (Host = localhost); ( IPv6 Zugriff : Host ::1 ) . Um phpMyAdmin / Adminer mit Root Rechten nutzen zu können wird daher ein weiterer passwortgeschützter Root Account angelegt:
1 2 3 |
CREATE USER 'root2'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'root2'@'localhost' WITH GRANT OPTION; Exit; |
Somit ist ein Login über phpMyAdmin / Adminer mit dem zweiten, passwortgeschützten Root Account möglich.
by Speefak