Как получить список учетных записей пользователей с помощью командной строки в MySQL?


1348

Я использую утилиту командной строки MySQL и могу перемещаться по базе данных. Теперь мне нужно увидеть список учетных записей пользователей. Как я могу это сделать?

Я использую версию MySQL 5.4.1.


@Mustapha Почему название меняется? Эти ответы здесь - SQL, который вы можете запустить из любого места, а не только из командной строки. И что этот тег добавляет к вопросу?
Руп

Цель моего редактирования состояла в том, чтобы сохранить согласованность между заголовком и описанием, но я думаю, у вас есть хорошая точка зрения. Сделайте правку Мистер @Rup
Мустафа Хадид

Ответы:


1848

Используйте этот запрос:

SELECT User FROM mysql.user;

Который выведет таблицу следующим образом:

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

Как отмечает Мэтью Шарли в комментариях к этому ответу , вы можете группировать по Userстолбцу, если хотите видеть только уникальные имена пользователей.


47
Я думаю, что может потребоваться группировка User, чтобы получить только уникальные пользовательские значения, поскольку для каждой записи user@ существует отдельная строка host.
Мэтью Шарли

5
Как найти ту же информацию без запроса SQL ??
Дивяншу дас

8
@barrycarter DELETE FROM mysql.user;лучше, WHERE user='someuser' and host='somehost';если вы DELETE FROM mysql.user;все пользователи ушли. Вход в систему после следующего перезапуска mysql или FLUSH PRIVILEGES;удаления пользователей из памяти. Вот пример одного из моих сообщений о том, как действоватьDELETE FROM mysql.user ответственно: dba.stackexchange.com/questions/4614/…
RolandoMySQLDBA

3
@GeoffreySHOW GRANTS FOR 'user'@'host';
fancyPants

5
вместо группировки вы можете просто использовать DISTINCTключевое слово:SELECT DISTINCT user FROM mysql.user;
user2683246

445

Я считаю этот формат наиболее полезным, поскольку он включает в себя поле хоста, которое важно в MySQL для различения записей пользователя.

select User,Host from mysql.user;

1
Просто любопытно. Когда это hostвступит в силу при работе с базами данных mysql? [Mysql Noob]
Прабхакар Ундурти

7
@Packer hostвступает в игру, когда вы подключаетесь с другого сервера. Можно предоставить различный доступ к 'packer'@'example.com'и'packer'@'google.com'
Рэй Бакстер

118

Учетная запись пользователя содержит имя пользователя и доступ на уровне хоста.

Таким образом, это запрос, который дает все учетные записи пользователей

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;

7
Это в основном то же самое, что и ответ Спканэ . В чем преимущество объединения столбцов пользователя и хоста?
Иэн Сэмюэль Маклин, старейшина,

8
Один пример: user@hostформат используется для установки паролей. Пропуск хоста из SET PASSWORDкоманды приводит к ошибке. SET PASSWORD FOR wordpressuser = PASSWORD('...');выдает ошибку ERROR 1133 (42000): Can't find any matching row in the user table. Включите хост, и он работает. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');производит Query OK, 0 rows affected (0.00 sec).
Иэн Самуэль Маклин, старейшина,

3
Лучший ответ, на что могут жаловаться скептики. Единственное, что я хотел бы изменить, это добавить ORDER BY userк нему.
Sjas

48

чтобы избежать повторений пользователей при подключении из разных источников:

select distinct User from mysql.user;

31

MySQL хранит информацию о пользователях в своей собственной базе данных. Имя базы данных есть MySQL. Внутри этой базы данных пользовательская информация находится в таблице, наборе данных с именем user. Если вы хотите увидеть, какие пользователи настроены в пользовательской таблице MySQL, выполните следующую команду:

SELECT User, Host FROM mysql.user;

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


23
SELECT * FROM mysql.user;

Это большая таблица, поэтому вы можете быть более разборчивы в выборе полей.


2
У меня есть 3 пользователя root с разных хостов. localhost, 127.0.0.1И ::1. Какой из них я должен сохранить и что я должен удалить? Спасибо!
Эмоциональность

4
Если вы не хотите, чтобы люди подключались через сеть, старый стандарт заключался в том, чтобы удалить все это. Тем не менее, в настоящее время, похоже, рекомендуется сохранять локальные хосты, так как они все равно недоступны по сети; это означает, что вы должны вместо этого сохранить все из них.
trysis

18

Войдите в MySQL как root и введите следующий запрос

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+

Я бы сказал +1 за упоминание входа в систему как root. Я пытался без этого, и это не сработало;)
leenephi

Вам нужно дать привилегии user1 для отображения списка пользователей. Без пользователя root вы получите ошибку. Поэтому сначала предоставьте привилегии. Войдите в систему как пользователь root, затем введите команду GRANT SELECT ON mysql.user TO 'user1'@'localhost'; now, войдите как user1 и введите команду. select User from mysql.user; Вы увидите список пользователей. :) +1 Наслаждайтесь
sandip divekar

15

Таблица mysql.db, возможно, более важна для определения прав пользователя. Я думаю, что запись в нем создается, если вы упомянули таблицу в команде GRANT. В моем случае таблица mysql.users не показала никаких полномочий для пользователя, когда он, очевидно, мог подключаться и выбирать и т. Д.

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...

1
На мой взгляд, важно то, что пользователям разрешено делать в базе данных. Таким образом, «SHOW GRANTS» весьма полезен, поскольку показывает, кому разрешено делать что.
Разработчик Marius Žilėnas

12

Я использую это для сортировки пользователей, поэтому разрешенные хосты легче обнаружить:

mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;

11

Питер и Джесси правы, но сначала убедитесь, что вы выбрали БД mysql.

use mysql;

select User from mysql.user;

это должно сделать ваш трюк


22
Это не обязательно use mysql;в случае, если вы поместите таблицу в базу данных mysql, как вы это сделали. Вы можете простоselect User from mysql.user;
vitaLee

5
Добавление use mysql;просто так, что вы можете использовать select User from user;вместо этого, select User from mysql.user;так как это, как правило, однократный запрос, нет необходимости использовать mysql db
Dan

1
после, use mysqlесли бы вы использовали, select user from user;то это могло бы быть чем-то, но вместо этого вы используете mysql.user, что делает использование use mysqlв начале ненужным.
Sнаđошƒаӽ


5
$>  mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt

Выполнение этой команды в приглашении linux сначала запросит пароль пользователя root mysql, при предоставлении правильного пароля он распечатает всех пользователей базы данных в текстовый файл.


3

Я нашел его еще одним полезным, поскольку он предоставляет дополнительную информацию о привилегиях DML и DDL

SELECT user, Select_priv, Insert_priv , Update_priv, Delete_priv, 
       Create_priv, Drop_priv, Shutdown_priv, Create_user_priv 
FROM mysql.user;

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.