Ist dies ein normaler Satz von MySQL-Berechtigungen?

9

Wenn Sie phpmyadmin in einem lokalen Test-Wamp-Setup verwenden und so ziemlich den Titel angeben, gibt es 3 Benutzer, die als user = ANY, password = NO markiert sind, wie z.

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

Keiner der drei Benutzer hat bestimmte Berechtigungen für Tabellen, daher können sie anscheinend nicht viel tun. Handelt es sich um eine allgemeine Sicherheitsmaßnahme, um explizit anzugeben, dass "Jeder" Benutzer, der keiner anderen Benutzergruppe angehört, keine Berechtigungen hat?

Chris
quelle
Dies ist eigentlich eine sehr gute Frage, da MySQL mit Standardberechtigungen geliefert wird, die nicht veröffentlicht werden. +1 !!!
RolandoMySQLDBA

Antworten:

6

In Wirklichkeit sind diese drei Benutzerkonten ziemlich gefährlich. Sie stellen eine sehr große Bedrohung für Testdatenbanken dar.

Leider bietet MySQL vollen Zugriff auf Testdatenbanken. Wie können Sie sie finden?

Führen Sie diese Abfrage aus:

 SELECT user,host,db from mysql.db;

Bei der Installation von MySQL werden zwei Zeilen angezeigt, die vollen Zugriff auf alle Datenbanken mit dem Namen "test" gewähren oder deren erste 5 Zeichen "test_" sind.

Warum ist das ein Problem ???

Versuchen Sie, diesen Befehl auszuführen:

$ mysql -u'' -Dtest

Sie haben die Testdatenbank ohne Passwort verbunden.

Erstellen Sie nun eine Tabelle und laden Sie sie mit einer Zeile:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

OK, große Sache. Könnten Sie diese Tabelle in Größe 30 mal verdoppeln?

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

Was bekommst du ?? Eine Tabelle mit 1.073.741.824 Zeilen. Leicht 4 GB +.

Stellen Sie sich vor, Sie erstellen eine Tabelle beliebiger Größe. Wie wäre es, eine Reihe von Tabellen in der Testdatenbank zu erstellen und nach Belieben frei darauf zuzugreifen?

Das Beste, was Sie unter diesen Umständen tun können, ist, diese Abfrage auszuführen:

DELETE FROM mysql.db;

und starte mysql neu. Dann werden diese drei Konten ordnungsgemäß außer Betrieb gesetzt.

Versuche es !!!

UPDATE 2011-09-12 10:00 EDT

Dies löschen:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

ist genau das, was Sie für eine Erstinstallation benötigen. Wenn Sie jedoch bereits Benutzer eingerichtet haben, können Sie dies stattdessen ausführen:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

Dadurch werden die beiden spezifischen DB-Berechtigungen entfernt.

Wie ich in meiner Antwort erwähnt habe, sind die drei Berechtigungen für Testdatenbanken sehr gefährlich. Durch Ausführen dieses DELETE werden diese Konten neutralisiert, da sie über die vollen Rechte zum Testen von Datenbanken verfügen.

RolandoMySQLDBA
quelle
Vielen Dank für die Erklärung, aber wird DELETE FROM mysql.db noch einen Teil dieser 3 Benutzer löschen? Ich möchte keine Daten / Privilegien außer diesen 3
Chris
@ Chris - Ich habe meine Antwort vor 3 Stunden aktualisiert, um Ihren Kommentar zu adressieren.
RolandoMySQLDBA
-1

Die Gefahr, diese anonymen Konten zu führen, wurde bereits sehr gut erklärt.

Das Handbuch enthält eine umfassende Checkliste mit Schritten, die zum " Sichern der anfänglichen MySQL-Konten " ausgeführt werden müssen.

Insbesondere im Abschnitt "Zuweisen anonymer Kontokennwörter" wird das Entfernen dieser Konten empfohlen.

Im Kapitel "Sichern von Testdatenbanken" wird außerdem Folgendes empfohlen:

Standardmäßig mysql.dbenthält die Tabelle Zeilen, die jedem Benutzer den Zugriff auf die testDatenbank und andere Datenbanken mit Namen ermöglichen, die mit beginnen test_. (...) Dies bedeutet, dass solche Datenbanken auch von Konten verwendet werden können, die ansonsten keine Berechtigungen besitzen. Wenn Sie den Benutzerzugriff auf Testdatenbanken entfernen möchten, gehen Sie wie folgt vor:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) Mit der vorhergehenden Änderung können nur Benutzer, die über globale Datenbankberechtigungen oder explizit für die Testdatenbank gewährte Berechtigungen verfügen, diese verwenden.

Insbesondere auf Nicht-Windows-Systemen wird empfohlen, das mysql_secure_installationSkript auszuführen . Das Windows-Installationsprogramm bietet meines Erachtens mehrere Installationsprofile. Einige von ihnen deaktivieren automatisch unsichere Einstellungen. Wenn nicht, muss die Checkliste manuell ausgeführt werden.

Bei Installateuren von Drittanbietern wie WAMP ist Vorsicht geboten. Die im offiziellen MySQL-Handbuch angegebenen Standardberechtigungen gelten möglicherweise nicht immer für diese benutzerdefinierten Installationen (wie in "außerhalb des Bereichs des Handbuchs)". Für einen Produktionsserver sind WAMP-Installationen und dergleichen natürlich um jeden Preis zu vermeiden .

RandomSeed
quelle
Warum die Ablehnung dieser Antwort?
user12345