Як отримати список облікових записів користувачів за допомогою командного рядка в MySQL?


1348

Я використовую утиліту командного рядка MySQL і можу переходити по базі даних. Тепер мені потрібно переглянути список облікових записів користувачів. Як я можу це зробити?

Я використовую версію MySQL 5.4.1.


@Mustapha Чому змінюється назва? Ці відповіді тут - SQL, який можна запускати з будь-якого місця, а не лише з командного рядка. І що додає цей тег до питання?
Rup

Метою моєї редакції було зберегти узгодженість між заголовком та описом, але я думаю, у вас є хороший пункт. Зробіть свою редакцію Mr. @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]
Prabhakar Undurthi

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

118

Обліковий запис користувача включає ім'я користувача та доступ до рівня хоста.

Тому це запит, який дає всі облікові записи користувачів

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

7
Це в основному те саме , що відповідь Spkane . Яка перевага об’єднання колонок користувача та хосту?
Ієн Самуель Маклін Старший

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
Якщо ви не хочете, щоб люди підключалися через мережу, старим стандартом було все це видалити. Однак сьогодні, мабуть, рекомендується зберігати локальні хости, оскільки вони все одно недоступні через мережу; це означає, що вам слід зберігати їх усі.
трис

18

Увійдіть до mysql як root та введіть наступний запит

select User from mysql.user;

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

Я б сказав +1 за згадування входу в систему як root. Я намагався не робити цього, і це не вийшло;)
leenephi

Щоб відобразити список користувачів, потрібно надати користувачеві пільги. Без користувача root ви отримаєте помилку. Тому спочатку надайте пільги. Увійдіть як користувач root, а потім введіть команду GRANT SELECT ON mysql.user TO 'user1'@'localhost'; тепер увійдіть як 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
На мій погляд, важливо, що користувачі можуть робити в базі даних. Тож "ПОКАЖИТИ ГРАНТИ" є досить корисним, оскільки показує, кому дозволено робити що-небудь.
розробник Marius Žilėnas

12

Я використовую це для сортування користувачів, тому дозволені хости легше помітити:

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

11

Пітер та Джессі є правильними, але просто переконайтеся, що спочатку виберіть DB-файл 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на початку зайвим.
Snađошƒаӽ


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.