Jak uzyskać listę kont użytkowników za pomocą wiersza polecenia w MySQL?

1348

Korzystam z narzędzia wiersza polecenia MySQL i mogę nawigować po bazie danych. Teraz muszę zobaczyć listę kont użytkowników. W jaki sposób mogę to zrobić?

Używam wersji MySQL 5.4.1.

Burntsugar
źródło
@Mustapha Dlaczego zmiana tytułu? Oto odpowiedzi na SQL, które można uruchomić z dowolnego miejsca, nie tylko z wiersza poleceń. A co ten tag dodaje do pytania?
Rup
Celem mojej edycji było zachowanie spójności między tytułem a opisem, ale myślę, że masz rację. Dokonaj edycji Mr. @Rup
Mustapha Hadid

Odpowiedzi:

1848

Użyj tego zapytania:

SELECT User FROM mysql.user;

Które wygeneruje tabelę taką jak ta:

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

Jak zauważa Matthew Scharley w komentarzach do tej odpowiedzi , możesz pogrupować dane według Userkolumny, jeśli chcesz zobaczyć unikalne nazwy użytkowników.

nieznanych
źródło
47
Myślę, że może być konieczne grupowanie User, aby uzyskać tylko unikalne wartości użytkownika, ponieważ dla każdego wpisu user@ jest osobny wiersz host.
Matthew Scharley,
5
Jak znaleźć te same informacje bez zapytania SQL?
Divyanshu Das
8
@ barrycarter DELETE FROM mysql.user;lepiej mieć WHERE user='someuser' and host='somehost';Jeśli to zrobisz DELETE FROM mysql.user;, wszyscy użytkownicy znikną. Loguje się po następnym uruchomieniu mysql lub FLUSH PRIVILEGES;wyeliminowaniu użytkowników z pamięci. Oto przykład jednego z moich postów na temat DELETE FROM mysql.userodpowiedzialnego działania : dba.stackexchange.com/questions/4614/…
RolandoMySQLDBA
3
@GeoffreySHOW GRANTS FOR 'user'@'host';
fancyPants
5
zamiast grupowania możesz użyć DISTINCTsłowa kluczowego:SELECT DISTINCT user FROM mysql.user;
user2683246
445

Uważam ten format za najbardziej użyteczny, ponieważ zawiera pole hosta, które jest ważne w MySQL do rozróżnienia rekordów użytkownika.

select User,Host from mysql.user;
spkane
źródło
1
Po prostu ciekawy. Kiedy wejdzie to hostw grę podczas pracy z bazami danych MySQL? [Mysql Noob]
Prabhakar Undurthi
7
@Packer hostwchodzi w grę, gdy łączysz się z innego serwera. Możliwe jest przyznanie innego dostępu do 'packer'@'example.com'i'packer'@'google.com'
Ray Baxter
118

Konto użytkownika obejmuje nazwę użytkownika i dostęp na poziomie hosta.

Dlatego jest to zapytanie, które daje wszystkie konta użytkowników

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;
RolandoMySQLDBA
źródło
7
Jest to w zasadzie to samo co odpowiedź Spkane . Jaka jest korzyść z połączenia kolumn użytkownika i hosta?
Iain Samuel McLean Starszy
8
Jeden przykład: user@hostformat służy do ustawiania haseł. Pominięcie hosta w SET PASSWORDpoleceniu powoduje błąd. SET PASSWORD FOR wordpressuser = PASSWORD('...');produkuje błąd ERROR 1133 (42000): Can't find any matching row in the user table. Dołącz hosta i to działa. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');produkuje Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Starszy
3
Najlepsza odpowiedź, bez względu na to, na co narzekający mogą narzekać. Jedyną rzeczą, którą bym zmienił, było dołączenie ORDER BY userdo niej.
sjas
48

aby uniknąć powtórzeń użytkowników, gdy łączą się z innego źródła:

select distinct User from mysql.user;
Nicolas Manzini
źródło
31

MySQL przechowuje informacje o użytkowniku we własnej bazie danych. Nazwa bazy danych to MySQL. W tej bazie danych informacje o użytkowniku znajdują się w tabeli, w zbiorze danych o nazwie user. Jeśli chcesz zobaczyć, którzy użytkownicy są skonfigurowani w tabeli użytkowników MySQL, uruchom następującą komendę:

SELECT User, Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | localhost |
| root             | demohost  |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
|                  | %         |
+------------------+-----------+
VPK
źródło
30

Jeśli masz na myśli rzeczywistych użytkowników MySQL, spróbuj:

select User from mysql.user;
Jesse Vogt
źródło
23
SELECT * FROM mysql.user;

To duży stół, więc możesz chcieć być bardziej selektywnym w wybranych polach.

Etzeitet
źródło
2
Mam 3 użytkowników root z różnymi hostami. localhost, 127.0.0.1I ::1. Który muszę zachować, a co usunąć? Dzięki!
emocjonalność
4
Jeśli nie chcesz, aby ludzie łączyli się przez sieć, starym standardem było usunięcie ich wszystkich. Jednak obecnie wydaje się, że zaleca się utrzymywanie hostów lokalnych, ponieważ i tak nie są one dostępne przez sieć; oznacza to, że powinieneś zatrzymać je wszystkie.
próbuje
18

Zaloguj się do mysql jako root i wpisz następujące zapytanie

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+
sandip divekar
źródło
Powiedziałbym +1 za wzmiankę o logowaniu jako root. Próbowałem tego nie robić i to nie zadziałało;)
leenephi
Musisz nadać uprawnienia użytkownikowi 1, aby wyświetlić listę użytkowników. Bez użytkownika root pojawi się błąd. Najpierw zapewnij uprawnienia. Zaloguj się jako użytkownik root, a następnie wpisz polecenie GRANT SELECT ON mysql.user TO 'user1'@'localhost'; teraz zaloguj się jako użytkownik1 i wpisz polecenie select User from mysql.user; Zobaczysz wyświetloną listę użytkowników. :) +1 Enjoy
sandip divekar
15

Tabela mysql.db jest prawdopodobnie ważniejsza przy określaniu uprawnień użytkownika. Wydaje mi się, że tworzony jest w nim wpis, jeśli wspominasz o tabeli w poleceniu GRANT. W moim przypadku tabela mysql.users nie pokazała żadnych uprawnień dla użytkownika, gdy oczywiście był w stanie połączyć się i wybrać itp.

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...
Brad Dre
źródło
1
Moim zdaniem ważne jest, co użytkownicy mogą robić w bazie danych. Tak więc „POKAŻ DOTACJE” jest dość przydatne, ponieważ pokazuje, kto może robić co.
Deweloper Marius Žilėnas
12

Używam tego do sortowania użytkowników, więc łatwiejszymi do zlokalizowania dozwolonymi hostami są:

mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;
Tobias Holm
źródło
11

Peter i Jesse mają rację, ale upewnij się, że najpierw wybrałeś DB MySQL.

use mysql;

select User from mysql.user;

to powinno wystarczyć

Armin Nehzat
źródło
22
Nie jest to konieczne use mysql;w przypadku, gdy zakres tabeli zostanie zawarty w bazie danych mysql. Możesz po prostuselect User from mysql.user;
vitaLee
5
Dodawanie use mysql;jest tylko po to, abyś mógł użyć select User from user;zamiast tego, select User from mysql.user;ponieważ jest to zwykle zapytanie jednorazowe, nie ma potrzeby używania mysql db
Dan.
1
po, use mysqljeśli użyłeś, select user from user;to mogło być coś, ale zamiast tego używasz mysql.user, co sprawia, że ​​używanie use mysqlna początku nie jest konieczne.
Sнаđошƒаӽ
10

Wyświetla listę unikalnych użytkowników:

SELECT DISTINCT User FROM mysql.user;
Nikhil Chavda
źródło
5
$>  mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt

Wykonanie tej komendy w wierszu poleceń linuksa najpierw poprosi o hasło użytkownika root mysql, po podaniu prawidłowego hasła wydrukuje wszystkich użytkowników bazy danych do pliku tekstowego.

Mian Asbat Ahmad
źródło
3

Uważam, że jest on bardziej przydatny, ponieważ zapewnia dodatkowe informacje na temat uprawnień DML i DDL

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
źródło
0
SELECT User FROM mysql.user;

użyj powyższego zapytania, aby uzyskać użytkowników MySQL

Arun Karnawat
źródło