Ich versuche, die anonymen Benutzer aus meiner mysql.users-Datenbank zu löschen. Allerdings habe ich merkwürdiges Verhalten bekommen. Wenn ich den Befehl eingebe:
DROP User ''@'WOPR';
Ich habe eine allgemeine Fehlermeldung erhalten. Also habe ich meinen Computer neu gestartet und es erneut versucht. Diesmal bekam ich die Antwort
Query OK, 0 rows affected.
Aber wenn ich reinsteige
SELECT User, Host, Password FROM mysql.user WHERE User='';
Die Rückgabe ist:
+------+------+----------+
| User | Host | Password |
+------+------+----------+
| | WOPR | |
+------+------+----------+
(WOPR ist mein Hostname)
Ich führe den Befehl aus
DROP User ''@'WOPR';
und erhalten das gleiche Ergebnis.
Ich führe eine Neuinstallation von MySQL 5.5 unter Arch Linux, Kernel-Version 2.6.33 aus.
Weiß jemand, was dieses Verhalten verursachen kann?
Antworten:
Dies sollte es für Sie tun.
Versuche es !!!
VORBEHALT
In MySQL sind bestimmte Benutzer in mysql.user vorinstalliert. Außerdem enthält mysql.db zwei Benutzer, die über anonymen Zugriff und vollständige Berechtigungen zum Testen von Datenbanken verfügen.
Tu das einfach
und Sie werden sehen, dass jeder, der eine Verbindung zu test oder einer Datenbank herstellt, die mit test_ beginnt, so ziemlich alles in der Testdatenbank tun kann. Dies ist schlecht, da eine Person mit uneingeschränktem Zugriff auf eine Testdatenbank eine Festplatte innerhalb weniger Minuten aufzehren kann.
Beispiel:
OK, große Sache. Es wird eine Tabelle mit 4 Bytes erstellt.
Versuchen Sie nun 30 Mal, diese SQL-Anweisung auszuführen:
Hey, ein Instant-Tisch mit 1.073.741.824 Zeilen (4 GB + Datei) !!! Imaging mit vollständigen Rechten für eine Testdatenbank, in der Sie diese Art von Chaos auf einer Festplatte anrichten können.
Mein Rat an Sie ist, dies auszuführen, um den Testbenutzerzugriff zu bereinigen:
Weitere Erläuterungen finden Sie in meinem Beitrag zu MySQL: Warum gibt es "Test" -Einträge in mysql.db?
Prost !!!
quelle
drop user
Syntax zu verwenden, anstatt die zugrunde liegendemysql.user
Tabelle direkt zu ändern?DROP USER
Syntax nicht funktioniert, wenn das Benutzerfeld leer ist (leere Zeichenfolge). Sie müssen es so machen, wie es die Antwort vorgibt.mysql.user
Tabelle noch andere Lösungen ?mysql.db
bei der Installation zwei Zeilen direkt anordnet , damit anonyme Benutzer auf eine Testdatenbank zugreifen können. Interessanterweise wurde mir mitgeteilt, dass die Installation von Percona Server diese Zeilen löscht, bevor die Installation abgeschlossen ist ( dba.stackexchange.com/questions/66584/… ). Da Sie MySQL verwenden, führen Sie entweder mysql_secure_installation aus oder löschen Sie diese beiden Zeilen selbst.