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.


@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.


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;

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;

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;

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 |
|                  | %         |
+------------------+-----------+

30

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

select User from mysql.user;

23
SELECT * FROM mysql.user;

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


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 |
+------+

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...

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;

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ć


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наđошƒаӽ


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.


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;

0
SELECT User FROM mysql.user;

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.