Конкретно меня интересует следующая ситуация: есть пользователь, который имеет права что-либо выполнить в базе данных. Допустим, я захожу в эту БД под этим пользователем с другого 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: Хочу обратить внимание на то, что все это имеет смысл только в случае, когда подключение к СУБД производится напрямую из клиентского приложения или из консоли. То-есть, для веба этот вариант не подойдет. В веб-приложениях к БД обращается серверный скрипт, а значит запрос всегда будет возвращать хост этого самого сервера.
Комментариев нет:
Отправить комментарий