Удаление анонимных учетных записей пользователей
По умолчанию некоторые установки MySQL создают анонимные учетные записи пользователей с пустым именем пользователя. Эти учетные записи представляют собой риск безопасности, поскольку они могут разрешить несанкционированный доступ. Проверка и удаление их, если они существуют, является критически важной мерой безопасности.
Вы можете идентифицировать анонимных пользователей, выполнив запрос к таблице mysql.user для записей с пустым именем пользователя.
SELECT User, Host FROM mysql.user WHERE User = '';
Если анонимные пользователи существуют, этот запрос перечислит их. Свежая установка на Ubuntu может включать одного, но более новые версии MySQL/MariaDB часто не имеют анонимных пользователей по умолчанию.
Если вы видите результаты, подобные этому:
+------+-----------+
| User | Host |
+------+-----------+
| | localhost |
+------+-----------+
1 row in set (0.00 sec)
Тогда вам следует удалить анонимного пользователя с помощью инструкции DROP USER, указав как имя пользователя (пустая строка ''), так и хост:
DROP USER ''@'localhost';
Вы должны увидеть следующее подтверждение:
Query OK, 0 rows affected (0.01 sec)
Однако, если ваш запрос возвращает пустой набор, как показано ниже:
Empty set (0.00 sec)
Это означает, что в вашей базе данных нет анонимных пользователей, что уже безопасно. В этом случае, если вы попытаетесь удалить несуществующего анонимного пользователя, вы получите ошибку:
ERROR 1396 (HY000): Operation DROP USER failed for ''@'localhost'
Эта ошибка ожидаема, если анонимный пользователь не существует, и вы можете безопасно продолжить.
После проверки на наличие анонимных пользователей и их удаления при необходимости, выполните команду FLUSH PRIVILEGES, чтобы убедиться, что все изменения применены:
FLUSH PRIVILEGES;
Снова проверьте, что анонимные пользователи больше не существуют, выполнив запрос SELECT:
SELECT User, Host FROM mysql.user WHERE User = '';
Этот запрос должен вернуть пустой набор, подтверждая отсутствие анонимных пользователей:
Empty set (0.00 sec)
Вы успешно проверили и устранили потенциальную уязвимость безопасности вашего сервера. Теперь вы можете выйти из оболочки MySQL.
exit;