MySQL SHOW GRANTS
zeigt die Berechtigungen des aktuellen Benutzers.
Gibt es eine Möglichkeit, sich als root anzumelden und die Berechtigungen aller Benutzer anzuzeigen?
quelle
MySQL SHOW GRANTS
zeigt die Berechtigungen des aktuellen Benutzers.
Gibt es eine Möglichkeit, sich als root anzumelden und die Berechtigungen aller Benutzer anzuzeigen?
Nichts eingebaut. Sie haben jedoch zwei Möglichkeiten:
Verwenden Sie common_schema
die sql_show_grants- Ansicht von. Beispielsweise können Sie Folgendes abfragen:
SELECT sql_grants FROM common_schema.sql_show_grants;
Oder Sie können nach bestimmten Benutzern abfragen, zum Beispiel:
SELECT sql_grants FROM common_schema.sql_show_grants WHERE user='app';
common_schema
Befolgen Sie zur Installation die Anweisungen hier .
Haftungsausschluss: Ich bin Autor dieses Tools.
Verwenden Sie das Percona Toolkit pt-show-grants
, zum Beispiel:
pt-show-grants --host localhost --user root --ask-pass
In beiden Fällen können Sie den GRANT
Befehl oder den REVOKE
(entgegengesetzten) Befehl anfordern.
Für den ersten Fall müssen Sie ein Schema installieren, für den zweiten Fall müssen Sie PERL-Skripte und Abhängigkeiten installieren.
ERROR 1146 (42S02): Table 'common_schema.sql_show_grants' doesn't exist
information_schema.user_privileges
?BEARBEITEN:
Wie von Shlomi Noach erwähnt:
quelle
information_schema.user_privileges
listet nur Privilegien auf Benutzerebene, wie zum BeispielSUPER
,RELOAD
etc. Es listet auch Allround-DML gewährt gerneSELECT
. Es spielt keine Liste Datenbank spezifische, Tisch sepcific, Spalte spezifische Routine spezifische Privilegien. Es gibt daher die GewährungGRANT SELECT ON mydb.* TO myuser@localhost
nicht nicht zeigen , aufinformation_schema.user_privileges
. Diecommon_schema
oben dargestellte Lösung aggregiert Daten aususer_privileges
und anderen Tabellen, um ein vollständiges Bild zu erhalten.Dieses Linux-Shell-Fragment durchläuft alle MySQL-Benutzer und führt jeweils eine SHOW GRANTS aus:
Funktioniert am besten, wenn Sie sich ohne Passwort mit MySQL verbinden können.
Die Ausgabe ist so formatiert, dass sie in einer MySQL-Shell ausgeführt werden kann. Achtung: Die Ausgabe enthält auch die MySQL-Root-Benutzerrechte und das Passwort! Entfernen Sie diese Zeilen, wenn Sie nicht möchten, dass der MySQL-Root-Benutzer geändert wird.
quelle
mysql --defaults-file=/auth/root-mysql.cnf --batch --skip-column-names --execute "SELECT User, Host from mysql.user" | while read user host; do echo "SHOW GRANTS FOR '${user}'@'${host}';"; done | mysql --defaults-file=/auth/root-mysql.cnf --batch | sed 's/^Grants for/-- Grants for/'
select * from mysql.user;
Kann Ihnen Benutzerlisten und Berechtigungen geben, die jedem von ihnen zugewiesen sind. Erfordert jedoch Zugriff auf die
mysql.user
Tabelle und derroot
Benutzer hat diese.quelle
mysql.db
. Berechtigungen für bestimmte Tabellen sind inmysql.tables_priv
und so weiter. Es ist also nicht so einfach.select * from mysql.user
in crackstation.net und sehen Sie sich die unverarbeitete Ausgabe an.Einen Liner (Wechsel
-uroot
zu-u$USER_NAME
für die Verwendung mit anderen Benutzern) in einer Unix bash (wegen der Backticks):oder ohne Backticks und mit Passwort inline (Leerzeichen vor dem Befehl schließt es aus dem Bash-Verlauf in Ubuntu aus):
In Windows:
quelle
Wenn Sie die folgenden SELECT - Anweisungen ausführen , ohne Fehler:
Dann können Sie den folgenden Code (unten) verwenden, der in SQL-Syntax geschrieben ist.
Ich habe diese Abfrage entworfen, um GRANT-Anweisungen für alle vorhandenen Berechtigungen neu zu erstellen (für häufige Wartung während der Datenbankmigration). Es gibt einige Probleme, die behandelt werden müssen, z. B. das Verknüpfen von Benutzern und Kennwörtern. Da wir Kennwörter jedoch häufig aktualisieren, lag dies nicht im Rahmen dieses Projekts.
Gerne beantworten / überprüfen wir Ihre Fragen oder Bedenken
quelle
Dies gibt Ihnen eine bessere Sicht ...
quelle
Der Befehl
SHOW GRANTS [FOR user]
kann einen beliebigen Benutzer anzeigen. Siehe hier für mehr Details.quelle
Wie in dieser Antwort erwähnt , können Sie die folgenden Befehle ausführen, um die datenbankspezifischen, tabellenspezifischen, spaltenspezifischen und routinenspezifischen Berechtigungen aller Benutzer aufzulisten. Beachten Sie, dass Sie dies über die Shell ausführen müssen, nicht über die MySQL-Eingabeaufforderung.
Der Vorteil dieses Ansatzes ist, dass Sie keine zusätzliche Software installieren müssen.
quelle
Wenn Sie Datenbanken häufig verwalten, möchten Sie wahrscheinlich strenge Berechtigungen behalten. Sie können eine gespeicherte Prozedur verwenden, um schnell eine Überprüfung durchzuführen. Dieses Beispiel funktioniert in Mariadb. Möglicherweise ist eine Optimierung erforderlich, um mit der Standard-MySQL-Version zu arbeiten.
Verwenden Sie die Antwort von Mansur Ali mit einem kleinen Tweak, um die Spalten neu zu ordnen, und fügen Sie einige Ordnungen hinzu, um die Ausgabe besser zu organisieren.
Verwenden eines Root-Logins:
Sie können die Prozedur ändern, um stattdessen die Tabelle mysql.user zu überprüfen.
Verwendung mit einem Root-Login:
Ich habe die MySQL-Workbench unter Ubuntu verwendet, um den Erstellungsprozedur-Teil dieser Antwort auszuführen.
Nebenbei bemerkt und ein wenig abseits des Themas, könnten Sie aber auch eine Prozedur haben, um unbekannte Hosts oder Benutzer anzuzeigen. Ein Beispiel für unbekannte Hosts:
Hinweis zur Verwendung: Geben Sie eine Reihe von Hosts an, die durch Kommas getrennt sind, sodass nur ein Satz von '' verwendet wird:
Sie können die Spaltenvariable auch ändern, indem Sie einen weiteren Parameter in die Prozedur aufnehmen und ihn mit ShowUnknownHosts (user, 'user1, user2') aufrufen. zum Beispiel.
quelle