Пользователь не предоставлен для базы данных MySQL, но все еще может запросить?

Вот что я делаю, чтобы проверить гранты для конкретного пользователя:

mysql> SHOW GRANTS FOR mmuser1;
+-----------------------------------------------------------------------------------------------------------------+
| Grants for mmuser1@%                                                                                   |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'mmuser1'@'%' IDENTIFIED BY PASSWORD '*fesfesfesfes' |
| GRANT ALL PRIVILEGES ON `shopping_mm`.* TO 'mmuser1'@'%'

Однако, если я сделаю следующее:

mysql -ummuser1 -p 

Я могу получить доступ и запросить другую базу данных (спорт). Также при выполнении:

SELECT Db,User FROM db;

Я могу видеть этот Db, связанный с этим пользователем.

Как это возможно, что не отображается в таблице грантов?

2 ответа

Решение

Как указано в SHOW GRANTS Синтаксис:

Если указать только часть имени пользователя в имени учетной записи, часть имени хоста '%' используется.

Вполне вероятно, что вы предоставили разрешение своему пользователю с явным именем хоста, например 'mmuser1'@'localhost', Как описано далее на той же странице, это можно проверить после подключения:

Чтобы перечислить привилегии, предоставленные учетной записи, которую вы используете для подключения к серверу, вы можете использовать любой из следующих операторов:

SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();

Или, альтернативно, просто проверить CURRENT_USER:

SELECT CURRENT_USER;

Может быть, у вас есть подстановочный пользователь, который обычно по умолчанию в Mysql настроен?

Любой или% для имени пользователя или хоста разрешит любое имя пользователя / разрешение хоста для БД, как на картинке ниже

Вы должны удалить этих пользователей, которые обычно по умолчанию в MySQL

Эта картинка является учетными записями по умолчанию, которые установлены с MYSQL, и все они должны быть удалены, как только вы создадите нового пользователя, поскольку ни один из них не является безопасным, они позволяют - любое имя пользователя USAGE доступ к БД

Другие вопросы по тегам