Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Список пользователей, имеющих доступ к mySQL

Конкретно меня интересует следующая ситуация: есть пользователь, который имеет права что-либо выполнить в базе данных. Допустим, я захожу в эту БД под этим пользователем с другого IP. Можно ли узнать, с какого IP был выполнен запрос в БД? Предполагается, что операционная система, наверное, регистрирует, кто и через какой порт начал работать с приложениями этой ОС.


Ответ

Вопрос слегка устарел, но, для сообщества, думаю, актуальность потерять не должен был. Да, у MySQL такая возможность есть. Есть функция CONNECTION_ID(), она возвращает идентификатор подключения. Начиная с MySQL 5.1 в служебной БД information_schema есть таблица PROCESSLIST, она содержит список подключений с детальной информацией по каждому из них. До 5.1 была команда SHOW PROCESSLIST В таблице information_schema.PROCESSLIST есть поле HOST. В нем выводится хост и порт на клиенте, через который работает подключение. То-есть, можно составить SQL-запрос который вернет это поле: SELECT HOST FROM information_schema.PROCESSLIST WHERE ID = CONNECTION_ID() Запрос вернет что-то типа 119.195.186.251:51368 Так как клиентский порт :51368 для журналирования не несет ни какой ценной информации, его можно отфильтровать с помощью функции SUBSTRING_INDEX() SELECT SUBSTRING_INDEX(HOST, ':', 1) FROM information_schema.PROCESSLIST WHERE ID = CONNECTION_ID() В результате получаем 119.195.186.251 - хост клиентского подключения. Теперь этот запрос можно добавить в любой триггер или хранимую процедуру, чтобы, например, добавить запись в лог-таблицу, или автоматически установить значение поля в какой-то из рабочих таблиц: SELECT SUBSTRING_INDEX(HOST, ':', 1) FROM information_schema.PROCESSLIST WHERE ID = CONNECTION_ID() INTO @host;
INSERT INTO log_table VALUE(..., @host, ...); PS: Хочу обратить внимание на то, что все это имеет смысл только в случае, когда подключение к СУБД производится напрямую из клиентского приложения или из консоли. То-есть, для веба этот вариант не подойдет. В веб-приложениях к БД обращается серверный скрипт, а значит запрос всегда будет возвращать хост этого самого сервера.

Комментариев нет:

Отправить комментарий