Bezogen auf mein MySQL-Problem
Ich habe einen Benutzer mit USAGE-Berechtigung in mysql.user, aber in mysql.db hat dieser Benutzer Auswählen, Einfügen, Aktualisieren, Löschen. Somit kann der Benutzer die Datenbank erfolgreich abfragen.
Ich kann keine Informationen darüber finden, wie diese mysql.db funktioniert. Ist es wie eine Art zwischengespeicherte Berechtigung? Wird ein mysqld-Neustart es spülen?
mysql> show grants for user@'xx.xx.xx.%';
+-------------------------------------------------------------------------------------------------------------------------------+
| Grants for user@xx.xx.xx.% |
+-------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'xx.xx.xx.%' IDENTIFIED BY PASSWORD 'xxx' REQUIRE SSL |
mysql> select host,db,user, select_priv,update_priv,delete_priv from
mysql.db where user='user';
| host | db | user | select_priv | update_priv | delete_priv |
| xx.xx.xx.1 | myDB | user | Y | Y | Y
GRANT x ON *.*
ausführen, sollte die Tabelle mysql.db nicht aktualisiert werden. Die Tabelle wird nur aktualisiert, wenn Sie die Datenbank in der GRANT-Anweisung ausdrücklich erwähnen.mysql.db
indem Sie mehrere REVOKE-Anweisungen für jede Datenbank ausgeben. *Es ist nicht gerade ein Cache, sondern der physische Speicher Ihrer Systeminternalen. Berechtigungen sind eine Sache, die dort gespeichert ist. Dort finden Sie auch Tabellen mit Informationen zu gespeicherten Prozeduren, Funktionen und Ereignissen.
Wenn Sie die Abfrageprotokollierung oder Profilerstellung aktiviert und auf eine bestimmte Weise konfiguriert haben, finden Sie diese Informationen auch in MySQL-DB-Tabellen.
Wenn es bei Ihrer Frage darum geht, dass Benutzer die MySQL-DB-Tabellen abfragen können, vermeiden Sie dies . Zuschüsse. Geben Sie stattdessen die entsprechenden Dauerwellen für bestimmte Datenbank- * oder Datenbanknamen ein.
quelle
Ich habe eine große Vorsichtsmaßnahme, die Sie für Ihre mysql.db ausüben müssen
Führen Sie diese Abfrage bitte aus:
Wenn Sie
test_db_count
= 2 erhalten, entfernen Sie sie sofort !!!Hier ist der Grund: Anonyme Benutzer haben Zugriff auf jede Datenbank, deren erste 4 Buchstaben sind
test
. Sie können viele CRUD-intensive Dinge in einer Testdatenbank ausführen. Möglicherweise möchten Sie die Testdatenbanken auch in etwas völlig anderes umbenennen. Bitte lesen Sie diese Links, da ich dieses Problem bereits im DBA StackExchange behoben habe.Anonymer Benutzer kann nicht von mysql.user gelöscht werden
Ist dies ein normaler Satz von MySQL-Berechtigungen?
Um die Notwendigkeit zu bestätigen, beachten Sie bitte, was MySQL 5.0 Certification Study Guide in seinen Aufzählungspunkten auf Seite 68 Absatz 6 sagt:
Führen Sie Folgendes aus, um diese fehlerhaften Einträge zu entfernen:
quelle