Настройка протоколирования
Спецификация
::=
::=
::=
::=
::=
::=
::=
Синтаксические правила
-
Допустимые
< имена событий >
приведены в таблицах 8, 9, 10, 11 и 12. -
Допустимые типы
< объектов протоколирования >
:-
USER
< имя пользователя >; -
USER
< имя схемы >; -
ROLE
< имя роли >; -
LEVEL
{< имя уровня доступа > | < идентификатор уровня доступа >}; -
GROUP
< имя группы >; -
STATION
< идентификатор станции >; -
NODE
< имя узла локальной сети >; -
DEVICE
< имя устройства >; -
TABLE
[< имя схемы >].< имя таблицы >; -
VIEW
[< имя схемы >].< имя представления >; -
SYNONYM
< имя синонима >; -
EVENT
< имя события >; -
PROCEDURE
< имя хранимой процедуры >; -
TRIGGER
< имя триггера >; -
CURSOR
< имя курсора >; -
LOCK
< системный идентификатор блокируемой таблицы >; -
SEQUENCE
< имя пользователя > < имя последовательности >; -
CHARACTER SET
< имя кодировки >; -
TRANSLATION
< имя правила трансляции >; -
ALIAS
< имя алиаса >.
-
Если конкретный < объект протоколирования >
не указан, будет протоколироваться доступ ко всем объектам БД.
< Объект протоколирования >
должен существовать на момент создания события протоколирования.
Общие правила
-
В подсистеме аудита СУБД ЛИНТЕР предусмотрено четыре типа установок:
-
глобальные – установки, действующие для всех пользователей и объектов БД;
-
объектные – установки для конкретных объектов БД;
-
персональные – установки для конкретных пользователей БД;
-
локальные – установки между конкретными пользователями и конкретными объектами БД.
Сначала проверяются глобальные установки, затем установки для конкретных объектов БД, затем установки для конкретных пользователей. После проверяются локальные установки.
Если задана глобальная установка, то проверяется наличие явных запретов протоколирования для конкретного объекта БД, для конкретного пользователя, для комбинации объекта и пользователя. В противном случае (если глобальная установка не задана) проверяется наличие установок для конкретных объектов БД.
Если установка для конкретного объекта БД, то проверяется наличие явных запретов протоколирования для конкретного объекта БД, для конкретного пользователя, для комбинации объекта и пользователя. В противном случае (если установка для конкретного объекта БД не задана) проверяется наличие установок для конкретных пользователей.
Локальные установки проверяются в любом случае (независимо от того заданы ли глобальные установки или установки для конкретных объектов/пользователей БД).
Примеры:
-
AUDIT ENABLE SELECT; (глобальная установка);
-
AUDIT ENABLE SELECT ON AUTO; (объектная установка);
-
AUDIT ENABLE SELECT FOR SYS; (персональная установка);
-
AUDIT ENABLE SELECT ON AUTO FOR SYS; (локальная установка).
-
-
Опция
< состояние протоколирования >
START
-
Команда активизирует подсистему протоколирования.
STOP
-
Команда отключает подсистему протоколирования.
ENABLE
-
Команда разрешает протоколирование указанного события и должна выполняться при активной подсистеме протоколирования (после выполнения команды
AUDIT START
).Результаты выполнения команды:
-
если
< имя события >
не задано, протоколируются все события; -
если
< имя события >
,< имя пользователя >
и< объект протоколирования >
не заданы, то изменяются глобальные установки; -
если задано
< имя пользователя >
или< объект протоколирования >
, то изменяются персональные установки; -
если
< имя события >
задано без указания< условия протоколирования >
, то устанавливается:-
заданное
< состояние протоколирования >
(ENABLE
); -
протоколирование только неудачных событий (
when not success
).
-
-
если
< состояние протоколирования >
не указывается, по умолчанию принимаетсяBY STATEMENT
; -
если задано только
< состояние протоколирования >
ENABLE
, включается протоколирование сразу всех неуспешных системных событий.
Пример.
audit enable linter error;
-
DISABLE
-
Команда запрещает протоколирование указанного события.
Если
< имя события >
не задано, запрещается протоколирование всех событий. Команда должна выполняться при активной подсистеме протоколирования (после выполнения командыAUDIT START
). Если при этом не заданы< имя пользователя >
и< объект протоколирования >
, то изменяются глобальные установки.Если задано
< имя пользователя >
, то изменяются персональные установки. Если задан< объект протоколирования >
, изменяются установки для конкретного объекта. Если заданы< имя пользователя >
и< объект протоколирования >
, изменяются локальные установки.В случае подачи команды audit disable
< имя события >
выполняются следующие действия:-
если ранее
< состояние протоколирования >
не было установлено, то запрос игнорируется; -
если
< состояние протоколирования >
ранее было установлено и в запросе не задано< условие протоколирования >
, то отменяются ранее установленное< состояние протоколирования >
и< условие протоколирования >
; -
если
< состояние протоколирования >
ранее было установлено и в запросе задано< условие протоколирования >
, то ранее установленное< состояние протоколирования >
не изменяется, а отменяется только ранее установленное< условие протоколирования >
(если было задано).
Если задано
< состояние протоколирования >
disable
, отменяется протоколирование сразу всех системных событий.Пример.
audit disable linter error;
Примечание
В текущей версии запрет протоколирования неудачно завершенных событий не поддерживается. Например, по команде
audit disable create table when not success
попытка создания таблицы протоколируется всегда (как при успешном завершении, так и при неуспешном). -
CLEAR
-
Команда предназначена для отмены явного запрета протоколирования для конкретного пользователя, для конкретного объекта, для комбинации пользователя и объекта, выполненные командами
AUDIT ENABLE
иAUDIT DISABLE
:-
AUDIT CLEAR ... WHEN SUCCESS
– очищает только «успешные» события; -
AUDIT CLEAR ... WHEN NOT SUCCESS
– очищает только «неуспешные» события; -
AUDIT CLEAR ...
– очищает все события.
-
-
Опция
< имя события >
Имя события, для которого устанавливается протоколирование. Список поддерживаемых событий приведен в таблицах 8, 9, 10, 11 и 12. Если имя события явно не задано, устанавливается протоколирование для всех возможных событий.
Примеры.
audit enable create table; audit disable create view;
-
Опция
< объект протоколирования >
Для событий группы
"RESOURCE EVENTS"
(кромеEXECUTE TRIGGER
иEXECUTE PROCEDURE
) в случае, если для них указан модификатор"ON < OBJECT >"
выдаётся код завершения 2499 (Возможность еще не реализована).Нереализованные команды установки аудита для событий:
"CREATE DEVICE"
,"ALTER DEVICE"
,"DROP DEVICE"
,"CREATE STATION"
,"ALTER STATION"
,"DROP STATION"
,"TRUNCATE TABLE"
. При попытке выполнения команды AUDIT для вышеуказанных событий будет выдан код завершения 99 (Операция не реализована). -
Опция
< имя пользователя >
Имя пользователя, чьи действия должны протоколироваться. Если указан конкретный пользователь, то событие возникает при условии, что текущий пользователь совпадает с
< именем пользователя >
. Если< имя пользователя >
не задано, протоколироваться будут действия всех пользователей БД. -
Опция
< уровень протоколирования >
BY SESSION
-
Событие протоколируется один раз для одного подключения (CONNECTION). При этом уровень протоколирования BY SESSION срабатывает только для установки для конкретного пользователя.
Если уровень BY SESSION задан для глобальной установки, установки для конкретного объекта БД или локальной установки, он игнорируется.
Примеры.
AUDIT ENABLE BY SESSION; (игнорируется) AUDIT ENABLE FOR SYS BY SESSION; (срабатывает)
BY STATEMENT
-
Событие протоколируется один раз для каждой SQL-операции (режим по умолчанию).
BY ACCESS
-
Событие протоколируется для каждого обращения к данным.
-
Опция
< условие протоколирования >
.WHEN NOT SUCCESS
-
Событие протоколируется только при неудачном завершении (режим по умолчанию).
WHEN SUCCESS
-
Событие протоколируется только в случае успешного завершения.
ALWAYS
-
Событие протоколируется в случае успешного и неуспешного завершения.
-
Опция
< параметры протоколирования >
SET
-
Устанавливает указанный
< параметр протоколирования >
:-
RECORDS
– максимальное количество записей в таблице аудита. При исчерпании свободных записей новые записи размещаются на месте самых старых записей; -
DAYS
– указывает количество предшествующих текущей дате дней, в течение которых необходимо хранить записи протоколирования. Зарезервировано для дальнейшего использования.
-
CANCEL
-
Отменяет ранее установленные
< параметры протоколирования >
.Конструкция
AUDIT CANCEL RECORDS LIMIT
запрещена.
-
События протоколируются в таблицы вида
$$$AUDIT_N
. гдеN
- целое число. Синоним$$$AUDIT
указывает на наполняемую в данный момент таблицу вида$$$AUDIT_N
. Для каждой таблицы установлен лимит1000000
. При превышении лимита, заданного командойAUDIT SET RECORDS LIMIT < новое значение >;
, происходит создание новой таблицы, а "старая" таблицы считается архивной копией. ЕслиAUDIT SET RECORDS LIMIT
делает лимит записей таблицы аудита меньшим, чем уже есть записей в этой таблице, то таблица с новым лимитом должна создаться в следующем кванте работы. -
Для очистки базы данных от накопленных архивных копий журнала предусмотрена процедура
clear_old_audit
, текст которой находится в файлеaudit_full_info.sql
каталога системных словарей. Процедура вызывается с одним аргументом - числом последних таблиц аудита, которое будет оставлено в базе. При запуске процедуры без аргументов будет оставлено10
таблиц. Если задан аргумент меньше10
, то он заменяется на10
. Процедура возвращаетTRUE
, если все запросы завершились без ошибок, иначеFALSE
. -
Процедура
SET_AUDIT_LAST
устанавливает в качестве источника данных для представленияAUDIT_EVENTS
текущую таблицу, привязанную к синониму$$$AUDIT
. Вызывается без аргументов. ВозвращаетTRUE
при успешном выполнении всех запросов,FALSE
в случае ошибок. -
Процедура
SET_AUDIT_ALL
устанавливает в качестве источника данных для представленияAUDIT_EVENTS
объединение поUNION ALL
всех таблиц аудита, которые есть в базе (или нескольких последних, если задан аргумент - количество таблиц). Вызывается без аргументов или с одним числовым аргументом. ВозвращаетTRUE
при успешном выполнении всех запросов,FALSE
в случае ошибок. Если произошла замена таблицы аудита, то эту процедуру следует вызвать заново перед обращением к представлениюAUDIT_EVENTS
. -
Для получения информации из журнала регистрации событий вместо представления AUDIT_EVENTS следует вызывать функцию get_audit_events(). Данная функция является оберткой для представления AUDIT_EVENTS и автоматически выполняет его перестроение при ротации таблиц $$$AUDIT.
Пример.
select event_number, eventid, status from get_audit_events();