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.