Вам когда-нибудь нужно было получить список всех пользователей на вашем сервере MySQL? Есть команды для отображения баз данных и таблиц, но нет команды MySQL show users
.
В этом руководстве объясняется, как вывести список всех учетных записей пользователей на сервере базы данных MySQL с помощью командной строки. Мы также покажем вам, как узнать, какие пользователи имеют доступ к данной базе данных.
Содержание
Подготовка
Мы предполагаем, что в вашей системе уже установлен сервер MySQL или MariaDB.
Все команды выполняются внутри оболочки MySQL от имени пользователя root. Чтобы получить доступ к оболочке MySQL, введите следующую команду и при появлении запроса введите пароль root-пользователя MySQL:
mysql -u root -p
Если вы не установили пароль для своего пользователя root MySQL, вы можете опустить опцию -p
.
Показать всех пользователей MySQL
MySQL хранит информацию о пользователях в таблице с именем user
в базе данных mysql
.
Чтобы получить список всех учетных записей пользователей MySQL, используйте SELECT
для извлечения всех строк из таблицы mysql.users
:
SELECT User, Host FROM mysql.user;
Результат должен выглядеть примерно так:
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | localhost |
| luke | % |
| yoda | % |
| jabba | 10.10.0.6 |
| jabba | 10.10.0.9 |
| chewbacca | localhost |
| leia | localhost |
| han | localhost |
+------------------+-----------+
8 rows in set (0.00 sec)
Приведенная выше команда показывает только два столбца из таблицы mysql.user
( User
и Host
). Эта таблица содержит более 40 столбцов, таких как Password
, Select_priv
, Update_priv
и т. Д.
Используйте команду desc mysql.user;
оператор для отображения информации о столбцах таблицы. Узнав имя столбца, вы можете запустить запрос к выбранным данным.
Например, чтобы получить список всех учетных записей пользователей MySQL, включая информацию о пароле и о том, активен он или просрочен, вы должны использовать следующий запрос:
SELECT User, Host, Password, password_expired FROM mysql.user;
+----------------+-----------+-------------------------------------------+------------------+
| User | Host | Password | password_expired |
+----------------+-----------+-------------------------------------------+------------------+
| root | localhost | | N |
| luke | % | *ADC3B5B27617732CD6320A2DA976258E149A7EC8 | N |
| yoda | % | *9550E004046348198A143A115550E1262209FB6F | N |
| jabba | 10.10.0.6 | *F91C86B486B945C083B61A05FF6E197560D187EC | Y |
| jabba | 10.10.0.9 | | Y |
| chewbacca | localhost | *17F2B1E48029294841AD66772BEBB7E6E6A005AF | N |
| leia | localhost | *74409C8DB55AC1A6829D801915981C46EDBFC64A | N |
| han | localhost | *7B3022FCAEC3534CE67C68322D8AF0C240D95745 | N |
+----------------+-----------+-------------------------------------------+------------------+
8 rows in set (0.00 sec)
Показать пользователей, имеющих доступ к конкретной базе данных
Информация о привилегиях уровня базы данных хранится в таблице mysql.db
.
Вы можете запросить таблицу, чтобы узнать, какие пользователи имеют доступ к данной базе данных и уровень привилегий.
Например, чтобы получить список всех пользователей, имеющих некоторый уровень доступа к базе данных с именем db_name
вы должны использовать следующий запрос:
SELECT * FROM mysql.db WHERE Db = 'db_name'G;
*************************** 1. row ***************************
Host: localhost
Db: db_name
User: db_user
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Execute_priv: Y
Event_priv: Y
Trigger_priv: Y
1 row in set (0.00 sec)
Чтобы получить информацию только об учетных записях пользователей, имеющих доступ к данной базе данных, без отображения используемых привилегий:
SELECT db, host, user FROM mysql.db WHERE db = 'db_name'
+---------+-----------+---------+
| db | host | user |
+---------+-----------+---------+
| db_name | localhost | db_user |
+---------+-----------+---------+
Следующий запрос покажет вам информацию обо всех базах данных и связанных пользователях:
SELECT db, host, user FROM mysql.db;
+------------------+-----------+-----------+
| db | host | user |
+------------------+-----------+-----------+
| db_name | localhost | db_user |
| ghost_production | localhost | chewbacca |
| blog_db | localhost | leia |
| linuxize | localhost | han |
+------------------+-----------+-----------+
Выводы
В этом руководстве мы показали, как получить список всех пользователей MySQL и узнать, какие пользователи имеют доступ к конкретной базе данных.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Не смог получить информацию о паролях:
$ sudo mysqladmin -u root -p version
Enter password:
mysqladmin Ver 8.0.28-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 8.0.28-0ubuntu0.20.04.3
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 41 min 58 sec
mysql> SELECT User, Host FROM mysql.user;
+——————+————+
| User | Host |
+——————+————+
| aaa | localhost |
| test1 | localhost |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+——————+————+
7 rows in set (0,01 sec)
mysql> SELECT User, Host, Password FROM mysql.user;
ERROR 1054 (42S22): Unknown column ‘Password’ in ‘field list’