Як переглянути список користувачів бази MySQL та MariaDB

  • Останнє оновлення: 3 Листопада 2023 р.
  • Перегляди: 492
  • Автор: Адмін
Як переглянути список користувачів бази 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 / MariaDB - Оператор LIKE

Повнотекстовий пошук MySQL / MariaDB - Оператор LIKE

MySQL / MariaDB Як отримати id останнього вставленого запису в таблиці - LAST_INSERT_ID

MySQL / MariaDB Як отримати id останнього вставленого запису в таблиці - LAST_INSERT_ID

MySQL / MariaDB Об'єднати рядки в один рядок - Функції CONCAT() та CONCAT_WS()

MySQL / MariaDB Об'єднати рядки в один рядок - Функції CONCAT() та CONCAT_WS()