Wie erhalte ich eine Liste der Benutzerkonten über die Befehlszeile in MySQL?

1348

Ich verwende das MySQL-Befehlszeilenprogramm und kann durch eine Datenbank navigieren. Jetzt muss ich eine Liste der Benutzerkonten sehen. Wie kann ich das machen?

Ich verwende die MySQL-Version 5.4.1.

verbrannter Zucker
quelle
@Mustapha Warum ändert sich der Titel? Diese Antworten hier sind SQL, das Sie von überall aus ausführen können, nicht nur über eine Befehlszeile. Und was fügt dieses Tag der Frage hinzu?
Rup
Der Zweck meiner Bearbeitung war es, die Konsistenz zwischen dem Titel und der Beschreibung aufrechtzuerhalten, aber ich denke, Sie haben einen guten Punkt. Nehmen Sie Ihre Bearbeitung vor Mr. @ Rup
Mustapha Hadid

Antworten:

1848

Verwenden Sie diese Abfrage:

SELECT User FROM mysql.user;

Welches wird eine Tabelle wie folgt ausgeben:

+-------+
| User  |
+-------+
| root  |
+-------+
| user2 |
+-------+

Wie Matthew Scharley in den Kommentaren zu dieser Antwort hervorhebt , können Sie nach UserSpalten gruppieren, wenn Sie nur eindeutige Benutzernamen sehen möchten.

unbekannt
quelle
47
Ich denke, es kann notwendig sein, auch zu gruppieren User, um nur eindeutige Benutzerwerte zu erhalten, da es für jeden user@ host-Eintrag eine separate Zeile gibt .
Matthew Scharley
5
Wie finde ich die gleichen Informationen ohne SQL-Abfrage?
Divyanshu Das
8
@barrycarter DELETE FROM mysql.user;besser haben WHERE user='someuser' and host='somehost';Wenn Sie dies tun DELETE FROM mysql.user;, sind alle Benutzer weg. Anmeldungen nach dem nächsten MySQL-Neustart oder FLUSH PRIVILEGES;Entfernen von Benutzern aus dem Speicher. Hier ist ein Beispiel für einen meiner Beiträge zum DELETE FROM mysql.userverantwortungsvollen Handeln
RolandoMySQLDBA
3
@ GeoffreySHOW GRANTS FOR 'user'@'host';
FancyPants
5
Anstatt zu gruppieren, können Sie einfach das DISTINCTSchlüsselwort verwenden:SELECT DISTINCT user FROM mysql.user;
user2683246
445

Ich finde dieses Format am nützlichsten, da es das Hostfeld enthält, das in MySQL wichtig ist, um zwischen Benutzerdatensätzen zu unterscheiden.

select User,Host from mysql.user;
spkane
quelle
1
Nur neugierig. Wann wird dies hostbei der Arbeit mit MySQL-Datenbanken zum Tragen kommen? [MySQL Noob]
Prabhakar Undurthi
7
@Packer das hostkommt ins Spiel, wenn Sie eine Verbindung von einem anderen Server herstellen. Es ist möglich, unterschiedlichen Zugang zu 'packer'@'example.com'und'packer'@'google.com'
Ray Baxter
118

Ein Benutzerkonto besteht aus dem Benutzernamen und dem Zugriff auf Hostebene.

Daher ist dies die Abfrage, die alle Benutzerkonten angibt

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;
RolandoMySQLDBA
quelle
7
Dies ist im Grunde das gleiche wie die Antwort von spkane . Was ist der Vorteil der Verkettung der Benutzer- und Hostspalten?
Iain Samuel McLean Elder
8
Ein Beispiel: Das user@hostFormat wird zum Festlegen von Passwörtern verwendet. Das Weglassen des Hosts aus dem SET PASSWORDBefehl führt zu einem Fehler. SET PASSWORD FOR wordpressuser = PASSWORD('...');erzeugt den Fehler ERROR 1133 (42000): Can't find any matching row in the user table. Schließen Sie den Host ein und es funktioniert. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');produziert Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Elder
3
Beste Antwort, worüber sich die Neinsager beschweren mögen. Das einzige, was ich ändern würde, war das Anhängen ORDER BY user.
Sjas
48

um Wiederholungen von Benutzern zu vermeiden, wenn sie eine Verbindung von einem anderen Ursprung herstellen:

select distinct User from mysql.user;
Nicolas Manzini
quelle
31

MySQL speichert die Benutzerinformationen in einer eigenen Datenbank. Der Name der Datenbank lautet MySQL. Innerhalb dieser Datenbank befinden sich die Benutzerinformationen in einer Tabelle, einem Dataset mit dem Namen user. Wenn Sie sehen möchten, welche Benutzer in der MySQL-Benutzertabelle eingerichtet sind, führen Sie den folgenden Befehl aus:

SELECT User, Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | localhost |
| root             | demohost  |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
|                  | %         |
+------------------+-----------+
VPK
quelle
30

Wenn Sie sich auf die tatsächlichen MySQL-Benutzer beziehen, versuchen Sie:

select User from mysql.user;
Jesse Vogt
quelle
23
SELECT * FROM mysql.user;

Es ist eine große Tabelle, daher möchten Sie möglicherweise selektiver entscheiden, welche Felder Sie auswählen.

Etzeitet
quelle
2
Ich habe 3 Root-Benutzer mit verschiedenen Hosts. localhost, 127.0.0.1Und ::1. Welches muss ich behalten und was muss ich löschen? Vielen Dank!
Emotionalität
4
Wenn Sie nicht möchten, dass Personen eine Verbindung über das Netzwerk herstellen, bestand der alte Standard darin, alle diese zu löschen. Heutzutage scheint es jedoch empfehlenswert zu sein, lokale Hosts zu behalten, da diese ohnehin nicht über das Netzwerk zugänglich sind. Dies bedeutet, dass Sie stattdessen alle behalten sollten.
Tryse
18

Melden Sie sich bei mysql als root an und geben Sie die folgende Abfrage ein

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+
Sandip Divekar
quelle
Ich würde +1 sagen, wenn ich die Anmeldung als root erwähne. Ich habe es versucht, ohne es zu tun, und es hat nicht funktioniert;)
Leenephi
Sie müssen Benutzer1 Berechtigungen erteilen, um die Benutzerliste anzuzeigen. Ohne Root-Benutzer erhalten Sie eine Fehlermeldung. Stellen Sie also zuerst die Berechtigungen bereit. GRANT SELECT ON mysql.user TO 'user1'@'localhost'; Melden select User from mysql.user; Sie sich als Root-Benutzer an und geben Sie den Befehl ein. Melden Sie sich jetzt als Benutzer1 an und geben Sie den Befehl ein. Die Benutzerliste wird angezeigt. :) +1 Viel Spaß
Sandip Divekar
15

Die Tabelle mysql.db ist möglicherweise wichtiger für die Bestimmung der Benutzerrechte. Ich denke, ein Eintrag darin wird erstellt, wenn Sie eine Tabelle im Befehl GRANT erwähnen. In meinem Fall zeigte die Tabelle mysql.users keine Berechtigungen für einen Benutzer, wenn er offensichtlich eine Verbindung herstellen und auswählen konnte usw.

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...
Brad Dre
quelle
1
Aus meiner Sicht ist es wichtig, was Benutzer in der Datenbank tun dürfen. "SHOW GRANTS" ist also sehr nützlich, da es zeigt, wer was tun darf.
Entwickler Marius Žilėnas
12

Ich verwende dies, um die Benutzer zu sortieren, damit die zulässigen Hosts leichter zu erkennen sind:

mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;
Tobias Holm
quelle
11

Peter und Jesse sind korrekt, aber stellen Sie sicher, dass Sie zuerst die MySQL-Datenbank auswählen.

use mysql;

select User from mysql.user;

das sollte deinen Trick machen

Armin Nehzat
quelle
22
Es ist nicht erforderlich, dass use mysql;Sie die Tabelle wie Sie auf die MySQL-Datenbank übertragen. Sie können nurselect User from mysql.user;
vitaLee
5
Das Hinzufügen use mysql;ist nur so, dass Sie es select User from user;stattdessen verwenden können, select User from mysql.user;da es normalerweise eine einmalige Abfrage ist. Es ist nicht erforderlich, die MySQL-Datenbank zu verwenden
Dan
1
danach, use mysqlwenn Sie verwendet hätten, select user from user;als das könnte etwas gewesen sein, aber stattdessen verwenden Sie mysql.user, was die Verwendung use mysqlam Anfang unnötig macht.
Sнаđошƒаӽ
10

Dies zeigt eine Liste eindeutiger Benutzer an:

SELECT DISTINCT User FROM mysql.user;
Nikhil Chavda
quelle
5
$>  mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt

Wenn Sie diesen Befehl an der Linux-Eingabeaufforderung ausführen, werden Sie zuerst nach dem Kennwort des MySQL-Root-Benutzers gefragt. Wenn Sie das richtige Kennwort angeben, werden alle Datenbankbenutzer in die Textdatei gedruckt.

Mian Asbat Ahmad
quelle
3

Ich fand seine nützlichere, da sie zusätzliche Informationen zu DML- und DDL-Berechtigungen enthält

SELECT user, Select_priv, Insert_priv , Update_priv, Delete_priv, 
       Create_priv, Drop_priv, Shutdown_priv, Create_user_priv 
FROM mysql.user;
Alper t. Turker
quelle
0
SELECT User FROM mysql.user;

Verwenden Sie die obige Abfrage, um MySQL-Benutzer zu erhalten

Arun Karnawat
quelle