Как посмотреть список пользователей базы MySQL и MariaDB

Как посмотреть список пользователей базы MySQL и MariaDB

Коллеги всем привет.

В сегодняшней статье мы поговорим о том как можно отобразить всех пользователей в базе данных Mysql. Кстати в MariaDB эти команды тоже подойдут которые я вам буду показывать.

Как мы все знаем, что основная функция любой базы данных это конечно хранить какую-то информацию в таблицах в структурированном виде. Доступ к этой информации мы получаем посредством авторизации в базу данных, и только потом мы можем запросить какую-то информацию из неё. Рано или поздно подходит тот момент когда мы создали очень много пользователей и нам необходимо пересмотреть их всех. Все пользователи в Mysql хранятся в системной базе данных mysql в таблице user.

Я вам покажу несколько простых запросов которые покажут вам ценную информацию о пользователях и помогут предотвратить возможные проблемы.

 

Если мы хотим смотреть пользователей через консоль в Linux, то нам нужно подключится к консоли Mysql командой:

$. mysql -u root -p

mysql users

Авторизоваться в базу данных мы будем из под учетной записи root, она является самой главной в базе данных Mysql. После введения команды дальше вас попросит ввести пароль от учетной записи root, если вы пароль укажите правильно то СУБД вас пропустит, а иначе получите ошибку авторизации.


 

Самым первым запросом мы просто запросим всех пользователей выполнивши запрос до системной базы данных mysql и в ней таблица user.

mysql> SELECT user FROM mysql.user;

mysql users

Поле user в результате указывает на то как называется имя пользователя в базе данных.

Этим запросом мы просто смотрим какие у нас есть пользователи в базе данных. Пользователей mysql.infoschema, mysql.session, mysql.sys и root нам сама СУБД создает при её первоначальной установки, и по этому я вам крайне не рекомендую с ними что-нибудь делать.

 

Но если у нас пользователей слишком много, а мы хотим узнать их количество, то мы можем воспользоваться специальной функцией COUNT(), которая нам посчитает всех пользователей.

mysql> SELECT COUNT(user) FROM mysql.user;

mysql users

Как видим в результате у нас в данный момент находится в базе данных Mysql всего 4 пользователя.


 

Если кто не знает, то в базе данных Mysql существуют не просто пользователи, а есть как локальные пользователи, так и внешние. Чтобы нам узнать какой пользователь локальный, а какой внешний то нам нужно выполнить тот же запрос, но еще добавить в выборку дополнительное поле по имени host.

mysql> SELECT user, host FROM mysql.user;

mysql users

Знак процента % означает что пользователь у нас является внешним, а значения localhost означает что пользователь локальный. Разница между локальным и внешним большая.

Вот к примеру у нас сейчас есть пользователь root. Мы под этим пользователем подключились к базе данных через консоль на самом сервере, где у нас установлена сама СУБД. Я допустим захочу подключиться к базе данных под этим же пользователем, но из своего ноутбука, то база данных мне этого сделать не даст так как root у нас локальный.

А от если я буду авторизоваться в базу данных из своего ноутбука, и использовать учетную запись it-inzhener, то база данных меня пропустит, потому что мы явно указали что у нас эта учетная запись является внешней. А от если я буду подключаться к базе данных через консоль на самом сервере где у нас установлена СУБД Mysql, то база данных меня не пропустит потому что подключатся к базе данных локально могут только локальные пользователи.

Вот и вся разница хоть и не большая, но может создать много проблем с доступом до базы данных.


 

Следующим примером допустим мы хотим узнать какие у нас пользователи заблокированные, а какие нет, для этого нам нужно выполнить тот же запрос, но еще добавить в выборку дополнительный параметр account_locked.

mysql> SELECT user, account_locked FROM mysql.user;

mysql users

Как видим в результате у нас появились какие-то Y и N. Так от значения N как раз и означает что пользователь является не заблокированный, а Y заблокированный, это значит что если возле учетной записи стоит N то пользователи сможет зайти в базу данных, а тот у кого стоит Y не сможет.

 

К примеру у нас в базе данных 1000 пользователей и подсчитывать сколько заблокированных, а сколько нет то это очень сложно и неудобно. Для такой цели мы можем наших пользователей сгруппировать с помощью дополнительной команды GROUP BY.

mysql> SELECT account_locked, COUNT(user) FROM mysql.user GROUP BY account_locked;

mysql users

В результате мы видим, что у нас 4 пользователя сейчас заблокированы и они не смогут пройти авторизацию в базу данных. А два пользователя у нас активны и они смогут зайти в базу данных.


 

Следующим простым примером мы можем посмотреть под каким пользователем мы сейчас авторизированны в базе данных.

mysql> SELECT user();

mysql users

или

mysql> SELECT current_user();

mysql users

В обоих вариантах база данных нам говорим что мы сейчас авторизированны из под учетной записи root.


 

В следующем примере мы можем посмотреть какие пользователи в данный момент авторизированны в базе данных. Этот обеспечивает нам важную информацию при мониторинге нашей базы данных Mysql на предмет несанкционированного доступа. Такая информация хранится в системной базе данных information_schema в таблице processlist.

mysql> SELECT user, host,db, command FROM information_schema.processlist;

mysql users

Описания полей.

  • user - Имя пользователя.
  • host - Локальный пользователь или внешний.
  • db - Имя базы данных к которой пользователь подключился.
  • command -  SQL запрос который пользователь выполняет в данный момент.

 

В итоге коллеги пользуя команды которые представлены в статье вы теперь можете легко структурировать информацию о пользователях.

Всем спасибо, я надеюсь что вам моя статья хоть чем-то помогла.

ПОХОЖИЕ СТАТЬИ

MySQL - Генерация тестовых данных
MySQL - Генерация тестовых данных
MYSQL
Читать далее
MySQL / MariaDB Как получить id последней вставленной записи в таблице - LAST_INSERT_ID
MySQL / MariaDB Как получить id последней вставленной записи в таблице - LAST_INSERT_ID
MYSQL
Читать далее
MySQL / MariaDB Как преобразовать регистр символов - Функции UPPER и LOWER
MySQL / MariaDB Как преобразовать регистр символов - Функции UPPER и LOWER
MYSQL
Читать далее