SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.01.2019 07:07:50

Settler
Участник
Зарегистрирован: 07.01.2019
Сообщений: 2

Логирование только действий администраторов

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

1) Запросы изменяющие базу данных логируются в binary_log – это не подходит потому что там не пишется ip-адрес клиента. Есть ли способ писать в этот лог ip-адрес клиента?

2) Все запросы логировать в general log. Если логировать в таблицу я вижу ip-адрес клиента в квадратных скобках и это рабочий способ выполнить задачу, однако очень накладный по ресурсам.

general_log в таблицу написал:

2019-01-04 11:29:47    user[user] @ localhost [127.0.0.1]    1    0    Query    select * from db.acq_rss

Если писать в файл, то в логах отсутствует информация по ip-адресу клиента.

general_log в файл написал:

190104 11:29:38 1 Connect user@localhost on
190104 11:29:47 1 Query select * from db.acq_rss

Есть ли способ писать в файл ip-адрес клиента?

3) Триггер на изменение каждой таблицы, информацию берем из information_schema.processlist, там в колонке host запросы пришедшие от администратора имеют вид localhost:порт. Это тоже рабочий способ. Но насколько я понимаю нельзя сделать один триггер на все таблицы или один тригер на таблицу processlist? Тоесть на 200 таблиц будет х 3 триггеров. Конечно текст самих триггеров можно сгенерировать скриптом, далее подумать об автоматизации при деплои. Но 600 триггеров это как то многовато.

4) Собственный лог на основе processlist. Создаем Daemon который очень часто делает запрос select * from processlist, отделяет нужное и пишет в таблицу лога. Но опять же, ресурсы на такое количество select и главное где гарантия что в промежутке между запросами не проскочит какой нибудь важный запрос. Есть ли способ потоком отслеживать изменения processlist?

Сервер AWS Linux база MySQL.

Отредактированно Settler (07.01.2019 07:19:53)

Неактивен

 

#2 07.01.2019 14:11:01

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5523

Re: Логирование только действий администраторов

log-slow-queries
long_query_time=0
log_output="FILE"

slow query log в файл написал написал:

# User@Host: root[root] @ localhost [127.0.0.1]

Неактивен

 

#3 09.01.2019 12:30:02

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6699

Re: Логирование только действий администраторов

Скорее всего, честный адрес вы никак не залогируете. В лог MySQL всё равно пишет имя пользователя, а не IP (т.е., если у Вас будет учетная запись вида username@'%', там будет % вместо IP; если нужен честный адрес, то нужно будет делать учетные записи для каждого возможного адреса).

Подозреваю, что ваши администраторы ходят под администраторскими учетными записями, а тогда вам подойдет general log / slow query log / audit log (но записей всё равно будет много, их нужно будет фильтровать).

Неактивен

 

#4 10.01.2019 17:44:06

Settler
Участник
Зарегистрирован: 07.01.2019
Сообщений: 2

Re: Логирование только действий администраторов

Спасибо за варианты.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson