Ich habe einen Server mit einer großen Anzahl von MySQL-Datenbanken. Seit kurzem werden einige der Schemata nicht mehr angezeigt, wenn ich als Root angemeldet bin.
Wenn ich mich mit den Anmeldedaten für diese bestimmte Datenbank anmelde, kann ich sie sehen.
Der „Eigentümer“ dieser Datenbank ist root, aber andere Datenbanken, die für root ebenfalls nicht sichtbar sind, gehören anderen.
Es scheint, als würden Datenbanken verschwinden, auf die wir kürzlich zugegriffen und an denen wir gearbeitet haben, aber mittlerweile sind mehr als 5 davon nicht mehr sichtbar. Es handelt sich nicht um einen lokalen Cache und jeder, der sich auch als Root anmeldet, hat dasselbe Problem.
Antwort1
Wenn deinCURRENT_USER()nicht angezeigt wird root@localhost
, verfügen Sie nicht über Root-Berechtigungen und können sich daher nicht verbinden.
Um zu sehen, welche Berechtigungen Sie tatsächlich haben, nachdem Sie eine Verbindung hergestellt haben, führen Sie Folgendes aus
SHOW GRANTS;
Wenn Sie eine Verbindung zu einer bestimmten Datenbank herstellen, sollten Sie sehen können
- die Tabellen dieser Datenbank
- Metadaten im INFORMATION_SCHEMA für genau diese Datenbank
Nehmen wir zum Beispiel an, Sie haben eine Verbindung zu buyspace_systdb hergestellt
Die Ausgabe vonSHOW GRANTS;
würde höchstwahrscheinlich ungefähr so aussehen
GRANT USAGE ON *.* ...
GRANT ALL PRIVILEGES ON buyspace_systdb.* TO ...
Der Benutzer root@localhost
würde funktionieren, wenn Sie sich von diesem lokalen Server aus anmelden. Wenn Sie sich remote anmelden, root@localhost
würde dies nicht zulassenBENUTZER()zur Authentifizierung alsCURRENT_USER(). Der Beweis hierfür ist in der ersten Anzeige in Ihrer Frage zu finden. Beachten Sie, dass Sie nur information_schema sehen können. Es wird praktisch leer sein, mit Ausnahme von information_schema.schemata, das 1 oder 2 Einträge enthalten würde. Wenn es root@'%'
in vorhanden wäre mysql.user
und dieselben Berechtigungen wie hätte root@localhost
, wäre es erlaubt, alles wie zu sehen root@localhost
.
MySQL verfügt über ein Authentifizierungsschema, das einen Abwärtsspiraleffekt hat. Wenn der Benutzer, mit dem Sie eine Verbindung herstellen möchten, nicht existiert, werden Benutzernamen versucht, die vager sind (Platzhalter oder eingeschränkte Berechtigungen zulassen). Siehe meinen DBA StackExchange-BeitragMySQL-Fehler: Zugriff für Benutzer „a“@„localhost“ verweigert (mit Passwort: JA) für weitere Einzelheiten hierzu.
Endeffekt: Sie können keine Verbindung root@localhost
von einem Remotestandort aus herstellen