Удаляем пользователя MySQL: полное руководство с примерами
Вы обнаружили в своей базе данных неиспользуемого или ненужного пользователя и хотите навести порядок? Удаление учетной записи в MySQL — это не просто команда DROP USER. Это многоэтапный процесс, где любая ошибка может привести к неожиданным последствиям.
Вы когда-нибудь сталкивались с ошибкой, когда пользователь не удаляется, хотя вы всё сделали правильно? Частая причина — активные подключения или забытые привилегии.
Мы подготовили для вас пошаговое руководство, которое проведет вас через все подводные камни. Вы научитесь не только безвозвратно удалять пользователей, но и грамотно подготавливать систему к этому. Вы узнаете, как определить, с какого хоста пользователь может подключаться, и почему это критически важно.
Поймете, как просмотреть все его права и привилегии перед удалением. Мы покажем, как безопасно отозвать разрешения на конкретные базы данных, такие как UPDATE или INSERT. А что делать, если пользователь в данный момент онлайн? Мы раскроем секрет, как аккуратно завершить его сессию, узнав ID процесса.
Этот материал сэкономит вам время и избавит от головной боли, связанной с блокировками и ошибками прав доступа. Готовы навести идеальный порядок в вашей СУБД? Переходите к статье и очищайте вашу систему от лишнего!
В СУБД MySQL доступно много действий для работы с пользователями. Одно из таких действий - удаление пользователя. Также дополнительно можно узнать какие полномочия присутствуют у пользователя и при необходимости лишить определённых прав.
В данной статье будет описано как удалить пользователя в MySQL в операционной системе Ubuntu 20.04.
Содержание статьи
- Как посмотреть хосты пользователя
- Как отозвать полномочия пользователя MySQL
- Как удалить пользователя MySQL
- Как удалить подключенного пользователя
- Выводы
Как посмотреть хосты пользователя
В MySQL пользователи не существуют сами по себе, они привязаны к хостам с которых к ним можно подключиться. Чтобы узнать к какому типу хоста привязан пользователь необходимо выполнить следующий SQL запрос:
SELECT user, host FROM mysql.user;

Тип хоста localhost означает что пользователь может входить под своей учетной записью только с локального сервера (на котором установлен MySQL), символ процента % означает что пользователь может подключиться под своей учетной записью удаленно и с любого хоста.
Как отозвать полномочия пользователя MySQL
Для начала необходимо войти в консоль MySQL. Для этого в терминале необходимо ввести следующую команду, где alex имя вашего пользователя:
mysql -u alex -p

В качестве примера вход в оболочку MySQL был осуществлен под пользователем alex.
Перед удалением пользователя в MySQL бывает полезным посмотреть права пользователя и при необходимости лишить его этих прав. Далее необходимо отобразить права нужного пользователя. Чтобы отобразить права текущего пользователя (который в данный момент подключен к консоли MySQL) можно выполнить одну из перечисленных ниже команд. Результат вывода будет одинаков везде независимо от выбранной команды:
SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();

Если права необходимо отобразить для конкретного пользователя, то необходимо воспользоваться следующей командой:
SHOW GRANTS FOR 'alex'@'localhost';

В приведенном примере были выведены все права пользователя alex. В качестве значений сначала указывается имя пользователя присутствующего на сервере MySQL, а через знак @ указывается тип учетной записи (localhost, %, имя сайта/домена, IP адрес).
В MySQL привилегии делятся на статические и динамические. Статические привилегии встроены в сам сервер MySQL, в отличие от динамических привилегий, которые можно определить во время выполнения запроса. Полный список всех доступных привилегий в MySQL доступен на официальном сайте MySQL
Например, для того чтобы убрать (отозвать) разрешения на UPDATE и INSERT для пользователя alex, который может подключаться удалённо (%) необходимо выполнить следующий SQL запрос:
REVOKE UPDATE, INSERT ON MyGuests FROM 'alex'@'%';

Для того что отобрать все права на конкретную базу данных для конкретного пользователя, например, alex, сразу необходимо выполнить SQL запрос:
REVOKE ALL ON test_db FROM 'alex'@'%';

При выполнении SQL оператора REVOKE подразумевается, что пользователю уже назначены права, которые необходимо отобрать иначе отобразится следующая ошибка:
ERROR 1147 (42000): There is no such grant defined for user 'alex' on host '%' on table 'MyGuests'

Как удалить пользователя MySQL
Для удаления пользователя в MySQL необходимо использовать SQL инструкцию DROP. Например, команда для удаления пользователя alex выглядит следующим образом:
DROP USER alex;

Как удалить подключенного пользователя
Если необходимо удалить пользователя, который подключен в текущий момент то сначала необходимо досрочно прервать его сессию. Для этого необходимо узнать ID сессии. Для этого необходимо выполнить команду:
SHOW PROCESSLIST;

В столбце Id будет отображен уникальный номер (ID) подключенного пользователя. Запомните его. Например, для того чтобы завершить сессию пользователя alex с идентификатором 16 необходимо выполнить команду:
KILL 16;

Если выполнить команду SHOW PROCESSLIST ещё раз, то можно увидеть что пользователь с ID 16 отсутствует:

После того как сессия пользователя будет завершена, пользователя можно удалить при помощи инструкции DROP. Например:
DROP USER alex;

Выводы
В данной статье было подробно описано как узнать полномочия пользователя в СУБД MySQL, а также как их отнять у пользователя. Дополнительно было рассмотрено как удалить пользователя MySQL. Если у вас остались вопросы задавайте их в комментариях!