8.4.5.7 Фильтрация аудиторного журнала
Для работы фильтрации аудиторного журнала, как описано здесь, должен быть установлен плагин аудиторного журнала и соответствующие таблицы и функции аудита. Если плагин установлен без необходимых для фильтрации по правилам таблиц и функций аудита, плагин работает в режиме устаревшей фильтрации, описанном в разделе 8.4.5.10 «Фильтрация аудиторного журнала в режиме устаревшей версии». Режим устаревшей версии (устаревший) — это поведение фильтрации, как оно было до MySQL 5.7.13; то есть, до введения фильтрации по правилам.
Свойства фильтрации аудиторного журнала
Плагин аудиторного журнала обладает возможностью управления записью аудиторных событий путем их фильтрации:
-
Аудиторные события могут быть отфильтрованы по следующим характеристикам:
Аккаунт пользователя
Класс аудиторного события
Подкласс аудиторного события
Поля аудиторного события, такие как те, которые указывают на статус операции или выполняемый SQL-запрос
-
Фильтрация аудита основана на правилах:
Определение фильтра создает набор правил аудита. Определения могут быть настроены для включения или исключения событий для ведения журнала на основе описанных характеристик.
Правила фильтра имеют возможность блокировать (прерывать) выполнение соответствующих событий помимо существующих возможностей ведения журнала событий.
Можно определить несколько фильтров, и любой заданный фильтр может быть назначен любому количеству учетных записей пользователей.
Можно определить фильтр по умолчанию для использования с любой учетной записью пользователя, которой не назначен явным образом фильтр.
Фильтрация аудиторного журнала используется для реализации сервисов компонентов. Для получения необязательных статистических данных запросов, доступных с этой версии, необходимо настроить их как фильтр с помощью компонента сервиса, который реализует службы, записывающие статистику в аудиторный журнал. Инструкции по настройке этого фильтра см. в разделе "Добавление статистики запросов для выявления аномалий".
Сведения о написании правил фильтрации см. в разделе 8.4.5.8 «Создание определений фильтров аудиторного журнала».
Фильтры аудиторного журнала могут быть определены и изменены с использованием SQL-интерфейса на основе вызовов функций. По умолчанию определения фильтров аудиторного журнала хранятся в базе данных системы
mysql, и вы можете отобразить фильтры аудита, выполнив запрос к таблицеmysql.audit_log_filter. Можно использовать другую базу данных для этой цели, в этом случае вам следует выполнить запрос к таблице. Дополнительную информацию см. в разделе 8.4.5.2 «Установка или удаление MySQL Enterprise Audit».database_name.audit_log_filterВ рамках текущей сессии значение только для чтения системной переменной
audit_log_filter_idуказывает, назначен ли фильтр сессии.
По умолчанию фильтрация аудиторного журнала по правилам не записывает аудиторные события для любых пользователей. Чтобы записать все аудиторные события для всех пользователей, используйте следующие инструкции, которые создают простой фильтр для включения ведения журнала и назначают его учетной записи по умолчанию:
SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
SELECT audit_log_filter_set_user('%', 'log_all');
Фильтр, назначенный для %, используется для подключений от любой учетной записи, которой не назначен явным образом фильтр (что изначально верно для всех учетных записей).
Как уже упоминалось, SQL-интерфейс для управления фильтрацией аудита основан на функциях. Ниже приведен краткий обзор этих функций:
audit_log_filter_set_filter(): Определение фильтра.audit_log_filter_remove_filter(): Удаление фильтра.audit_log_filter_set_user(): Начало фильтрации учетной записи пользователя.audit_log_filter_remove_user(): Остановка фильтрации учетной записи пользователя.audit_log_filter_flush(): Очистка внесенных изменений в таблицы фильтра, чтобы повлиять на текущую фильтрацию.
Примеры использования и полные сведения о функциях фильтрации см. в разделе "Использование функций фильтрации аудиторного журнала" и разделе "Функции аудиторного журнала".
Ограничения функций фильтрации аудиторного журнала
Функции фильтрации аудиторного журнала подчиняются этим ограничениям:
Для использования любой функции фильтрации необходимо включить плагин
audit_log, в противном случае произойдет ошибка. Кроме того, таблицы аудита должны существовать, в противном случае произойдет ошибка. Инструкции по установке плагинаaudit_logи его соответствующих функций и таблиц см. в разделе 8.4.5.2 «Установка или удаление MySQL Enterprise Audit».-
Для использования любой функции фильтрации пользователю необходимо иметь привилегию
AUDIT_ADMINSUPERили произойдет ошибка. Для предоставления одной из этих привилегий учетной записи пользователя используйте данную инструкцию:GRANT
privilegeON *.* TOuser;В качестве альтернативы, если вы предпочитаете не предоставлять привилегию
AUDIT_ADMINилиSUPER, но при этом разрешать пользователям доступ к определенным функциям фильтрации, можно определить хранимые программы “оберток”. Этот метод описан в контексте функций ключей в разделе "Использование функций общего назначения для работы с ключами"; его можно адаптировать для использования с функциями фильтрации. -
Плагин
audit_logработает в режиме устаревшей версии, если он установлен, но соответствующие таблицы и функции аудита не созданы. Плагин записывает эти сообщения в журнал ошибок при запуске сервера:[Warning] Plugin audit_log reported: 'Failed to open the audit log filter tables.' [Warning] Plugin audit_log reported: 'Audit Log plugin supports a filtering, which has not been installed yet. Audit Log plugin will run in the legacy mode, which will be disabled in the next release.'
В режиме устаревшей версии (устаревшем) фильтрация может выполняться только по учетной записи события или статусу. Подробнее см. в разделе 8.4.5.10 «Фильтрация аудиторного журнала в режиме устаревшей версии».
-
Теоретически возможно, что пользователь с достаточными правами может случайно создать элемент “отмена” в фильтре аудиторного журнала, который препятствует доступу к системе самим администраторам и другим администраторам. Привилегия
AUDIT_ABORT_EXEMPTдоступна, чтобы разрешить пользователю всегда выполнять запросы, даже если элемент “отмена” их заблокирует. Учетные записи с этой привилегией, следовательно, могут использоваться для восстановления доступа к системе после неправильной настройки аудита. Запрос все равно регистрируется в аудиторском журнале, но вместо отклонения он разрешается благодаря привилегии.Учетные записи, созданные с привилегией
SYSTEM_USER, имеют привилегиюAUDIT_ABORT_EXEMPT, автоматически назначенную при их создании. ПривилегияAUDIT_ABORT_EXEMPTтакже назначается существующим учетным записям с привилегиейSYSTEM_USERпри выполнении процедуры обновления, если таким учетным записям не назначена эта привилегия.
Использование функций фильтрации журнала аудита
Перед использованием функций журнала аудита установите их в соответствии с инструкциями в разделе 8.4.5.2 «Установка или удаление MySQL Enterprise Audit». Для использования любой из этих функций требуется привилегия AUDIT_ADMIN или SUPER.
Функции фильтрации журнала аудита позволяют управлять фильтрацией, предоставляя интерфейс для создания, изменения и удаления определений фильтров и назначения фильтров учетным записям пользователей.
Определения фильтров представляют собой JSON значения. Сведения об использовании JSON данных в MySQL см. в разделе 13.5 «Тип данных JSON». В этом разделе показаны некоторые простые определения фильтров. Дополнительные сведения об определениях фильтров см. в разделе 8.4.5.8 «Создание определений фильтров журнала аудита».
При поступлении соединения плагин журнала аудита определяет, какой фильтр использовать для новой сессии, выполняя поиск имени учетной записи пользователя в текущих назначениях фильтров:
Если пользователю назначен фильтр, журнал аудита использует этот фильтр.
В противном случае, если нет назначения фильтра для конкретного пользователя, но есть фильтр, назначенный учетной записи по умолчанию (
%), журнал аудита использует фильтр по умолчанию.В противном случае журнал аудита не выбирает никаких событий аудита из сессии для обработки.
Если во время сессии происходит операция смены пользователя (см. ), назначение фильтра для сессии обновляется по тем же правилам, но для нового пользователя.
По умолчанию ни одной учетной записи не назначен фильтр, поэтому обработка аудируемых событий не происходит для какой-либо учетной записи.
Предположим, что вы хотите изменить настройки по умолчанию, чтобы регистрировать только действия, связанные с подключением (например, видеть события подключения, смены пользователя и отключения, но не SQL-запросы, выполняемые пользователями во время подключения). Для этого определите фильтр (здесь он называется log_conn_events), который разрешает ведение журнала только событий в классе connection, и назначьте этот фильтр учетной записи по умолчанию, представленной именем учетной записи %:
SET @f = '{ "filter": { "class": { "name": "connection" } } }';
SELECT audit_log_filter_set_filter('log_conn_events', @f);
SELECT audit_log_filter_set_user('%', 'log_conn_events');
Теперь журнал аудита использует этот фильтр по умолчанию для подключений от любой учетной записи, которой не определен явный фильтр.
Чтобы явно назначить фильтр определенной учетной записи или учетным записям, определите фильтр, а затем назначьте его соответствующим учетным записям:
SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
SELECT audit_log_filter_set_user('user1@localhost', 'log_all');
SELECT audit_log_filter_set_user('user2@localhost', 'log_all');
Теперь полная регистрация включена для user1@localhost и user2@localhost. Подключения от других учетных записей по-прежнему фильтруются с использованием фильтра по умолчанию для учетной записи.
Чтобы отсоединить учетную запись пользователя от текущего фильтра, либо отменить назначение фильтра, либо назначить другой фильтр:
-
Чтобы отменить назначение фильтра учетной записи пользователя:
SELECT audit_log_filter_remove_user('user1@localhost');Фильтрация текущих сессий для учетной записи не изменяется. Последующие подключения от учетной записи фильтруются с использованием фильтра по умолчанию для учетной записи, если он существует, в противном случае не регистрируются.
-
Чтобы назначить другой фильтр учетной записи пользователя:
SELECT audit_log_filter_set_filter('log_nothing', '{ "filter": { "log": false } }'); SELECT audit_log_filter_set_user('user1@localhost', 'log_nothing');Фильтрация текущих сессий для учетной записи не изменяется. Последующие подключения от учетной записи фильтруются с использованием нового фильтра. Для показанного здесь фильтра это означает отсутствие регистрации новых подключений от
user1@localhost.
При фильтрации журнала аудита сравнение имен пользователей и имен хостов регистрозависимо. Это отличается от сравнений для проверки привилегий, для которых сравнение имен хостов не регистрозависимо.
Для удаления фильтра выполните следующие действия:
SELECT audit_log_filter_remove_filter('log_nothing');
Удаление фильтра также отменяет его назначение для всех пользователей, которым он был назначен, включая все текущие сессии этих пользователей.
Описанные выше функции фильтрации аудита влияют на фильтрацию аудита немедленно и обновляют таблицы журнала аудита в базе данных системы mysql, в которых хранятся фильтры и учетные записи пользователей (см. Таблицы журнала аудита). Также возможно напрямую изменять таблицы журнала аудита с помощью операторов, таких как INSERT, UPDATE и DELETE, но такие изменения не влияют на фильтрацию немедленно. Чтобы выполнить ваши изменения и сделать их действующими, вызовите audit_log_filter_flush():
SELECT audit_log_filter_flush();
audit_log_filter_flush() следует использовать только после непосредственного изменения таблиц аудита, чтобы принудительно перезагрузить все фильтры. В противном случае следует избегать использования этой функции. По сути, это упрощенная версия выгрузки и загрузки плагина audit_log с использованием UNINSTALL PLUGIN плюс INSTALL PLUGIN.
audit_log_filter_flush() влияет на все текущие сессии и отсоединяет их от предыдущих фильтров. Текущие сессии больше не регистрируются, пока не отключится и не подключится заново или не выполнится операция смены пользователя.
Чтобы определить, назначен ли фильтр текущей сессии, проверьте значение сессии для только для чтения audit_log_filter_id системной переменной. Если значение равно 0, фильтр не назначен. ненулевое значение указывает на внутренний ID назначенного фильтра:
mysql> SELECT @@audit_log_filter_id;
+-----------------------+
| @@audit_log_filter_id |
+-----------------------+
| 2 |
+-----------------------+
© 2025 Oracle
Licensed under the GPLv2 License.