Anonyme Benutzerkonten entfernen
Standardmäßig erstellen einige MySQL-Installationen anonyme Benutzerkonten, die einen leeren Benutzernamen haben. Diese Konten stellen ein Sicherheitsrisiko dar, da sie unbefugten Zugriff ermöglichen können. Es ist eine kritische Sicherheitspraxis, nach ihnen zu suchen und sie zu entfernen, falls sie vorhanden sind.
Sie können anonyme Benutzer identifizieren, indem Sie die Tabelle mysql.user nach Einträgen mit einem leeren Benutzernamen abfragen.
SELECT User, Host FROM mysql.user WHERE User = '';
Wenn anonyme Benutzer vorhanden sind, listet diese Abfrage sie auf. Eine frische Installation auf Ubuntu kann einen enthalten, aber neuere Versionen von MySQL/MariaDB haben oft standardmäßig keine anonymen Benutzer.
Wenn Sie Ergebnisse wie diese sehen:
+------+-----------+
| User | Host |
+------+-----------+
| | localhost |
+------+-----------+
1 row in set (0.00 sec)
Dann sollten Sie den anonymen Benutzer mit der Anweisung DROP USER entfernen und sowohl den Benutzernamen (der ein leerer String '' ist) als auch den Host angeben:
DROP USER ''@'localhost';
Sie sollten diese Bestätigung sehen:
Query OK, 0 rows affected (0.01 sec)
Wenn Ihre Abfrage jedoch ein leeres Set zurückgibt, wie zum Beispiel:
Empty set (0.00 sec)
Bedeutet dies, dass keine anonymen Benutzer in Ihrer Datenbank vorhanden sind, was bereits sicher ist. In diesem Fall erhalten Sie einen Fehler, wenn Sie versuchen, einen nicht vorhandenen anonymen Benutzer zu löschen:
ERROR 1396 (HY000): Operation DROP USER failed for ''@'localhost'
Dieser Fehler ist zu erwarten, wenn kein anonymer Benutzer vorhanden ist, und Sie können sicher fortfahren.
Nachdem Sie nach anonymen Benutzern gesucht und diese gegebenenfalls entfernt haben, leeren Sie die Berechtigungen, um sicherzustellen, dass alle Änderungen angewendet werden:
FLUSH PRIVILEGES;
Überprüfen Sie erneut, ob keine anonymen Benutzer mehr vorhanden sind, indem Sie die SELECT-Abfrage ausführen:
SELECT User, Host FROM mysql.user WHERE User = '';
Diese Abfrage sollte ein leeres Set zurückgeben und bestätigen, dass keine anonymen Benutzer vorhanden sind:
Empty set (0.00 sec)
Sie haben erfolgreich nach einer potenziellen Sicherheitslücke auf Ihrem Server gesucht und diese behoben. Sie können nun die MySQL-Shell verlassen.
exit;