Назад | Перейти на главную страницу

Грант пользователя MySQL не работает - скрытое разрешение в mysql.db

У меня есть пользователь mysql, подключающийся с Server2 к Server1 через SSL (mysql 5.0.77).

Вот гранты для этого пользователя на Server1 (server2 имеет ip в диапазоне xx.xx.xx.%)

mysql> show grants for user@'xx.xx.xx.%';
+-------------------------------------------------------------------------------------------------------------------------------+ 
| Grants for user@xx.xx.xx.%                                      |
+-------------------------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'user'@'xx.xx.xx.%' IDENTIFIED BY PASSWORD 'xxx' REQUIRE SSL |

Я сделал flush privileges, но даже без прав я все еще могу показывать базы данных, показывать таблицы, выбирать. Как такое возможно? !!!

Я проверил, что в «Показать полный список процессов» пользователь не всегда подключен, новое новое соединение mysql. Как только соединение открылось, я делаю «шоу грантов», действующее разрешение такое же ... ИСПОЛЬЗОВАНИЕ.

-

В таблице mysql.db есть запись для этого пользователя, в которой говорится, что у него есть выбор, вставка, обновление и удаление в базе данных. Так что же это за скрытая таблица разрешений? Как это разрешение могло попасть туда вместо mysql.user?

Возможно, у вас есть анонимный пользователь в mysql.user.

Перво-наперво. Запустите этот запрос:

SELECT USER(),CURRENT_USER();

ПОЛЬЗОВАТЕЛЬ () сообщает, как вы пытались аутентифицироваться

ТЕКУЩИЙ ПОЛЬЗОВАТЕЛЬ() сообщает, как mysqld разрешил аутентификацию

Если вторая функция обнаруживает странного пользователя, скорее всего, это анонимный пользователь.

Перейдите к моему ответу DBA StackExchange о том, как MySQL выполняет аутентификацию пользователей, а также как и почему удалять анонимных пользователей..