Структуры аудита
Contents
Структуры аудита#
Система Global предоставляет множество инструментов по контролю за изменением данных, позволяющих отслеживать
Добавление, изменение и удаление данных
Блокировки и ошибки при работе БД
Исполнение периодических работ
Изменение размера таблиц
Открытие выборок и выполнение операций
Исполнение JEXL-скриптов
Все таблицы аудита хранятся в табличном пространстве, указанном в Btk_AuditPkg().schema
. По умолчанию это AUD
. В этом разделе документации представлена информация по большинству из них
Аудит классов#
Содержит информацию об создании экземпляров класса, изменении атрибутов, выполнении операций. Позволяет отследить взаимодействия с данными вплоть до конкретного пользователя, секунды и рабочего места. Пользовательский интерфейс доступен в Настройка системы > Аудит \ Аудит открытия форм и выполнения операций
.
Записи аудита хранятся в таблицах отдельных для каждого класса-шапки бизнес-объекта. Названия таблиц формируются следующим образом:
Формирование названий таблиц аудита классов
${cистемное имя класса-шапки бизнес-объекта}_dzaud:
Btk_User_dzaud
Bs_Goods_dzaud
Изменения обрабатываются в SessionImpl#flush()
. Сбор информации о значении атрибутов происходит до и после применения изменений сессии к базе данных. Запись в аудит - после
Хранимые поля
idrootclass
- id класса-шапки бизнес-объектаgidrootobj
- gid класса-шапки бизнес-объектаsrootobjhl
- наименование класса-шапки бизнес-объектаidclass
- id классаgidobj
-sobjhl
-idaction
- id действия пользователя
один изBtk_AuditAction
: «Создание», «Изменение», «Удаление»joldvalue
- JSON-объект
хранящий значения атрибутов объекта до измененийjnewvalue
- JSON-объект
хранящий новые значения изменённых атрибутовjoldvaluehl
- JSON-объект
хранящий наименования ссылочных атрибутов до измененийjnewvaluehl
- JSON-объект
хранящий новые наименования изменённых ссылочных атрибутовddate
- время и дата измененияsremark
- примечаниеsuser
- имя пользователяsclienthostip
- IP-адресjoperinfo
-
Журнал блокировок базы данных btk_dblockshistory
#
Отображает дерево блокировок сессий БД. Подробнее…
Журнал аудита сторонних систем btk_idextaudit
#
Содержит историю изменения идентификатора внешних систем. Выполняется на каждую установку значения в сеттере Btk_ExtSystemAvi.ListMaster#setsKey
Хранимые поля
gidObj
- объект, к которому подключена внешняя системаsOldValue
- предыдущее значениеsNewValue
- изменённое значениеidExtSystem
- идентификатор внешней системыidExtSystemHL
- наименование внешней системыdDate
- когда произошло изменениеsUser
- кем было произведено изменениеsClientHostIP
- IP-адрес
Адрес, с которого была инициирована процедура изменения
Скрипты взаимодействия с таблицой#
Регистрация#
Btk_JIdExtPkg.installTable();
Добавление записи#
insertAudInfo(
gidObj: NGid,
idExtSystem: NLong,
sOldValue: NString,
sNewValue: NString
);
Журнал выполнения работ btk_jobexechistory
#
Содержит историю исполнения регулярно выполняемых работ Quartz Scheduler
. Позволяет анализировать исполнение работ: длительность, время запуска и его корректность. Обновляется каждые 15 минут работой Btk_SlowQueryHistoryUpdate
Хранимые поля
idJobEvent
- идентификатор событияsScript
- текст исполняемого JEXL-скриптаnPeriod
- время исполнения [минуты]bSlow
- длительная работа
Признак для работ, выполняющихся более 15-ти минутbNight
- ночная работа
Признак для работ, выполняющихся с 22:00 до 08:00
Скрипты взаимодействия с таблицой#
Регистрация#
Btk_MonitorDBActivityPkg.dataInstall();
Обновление#
Btk_MonitorDBActivityPkg.updateSlowQueryHistory();
Журнал информации о работе БД btk_monitordbactivityaud
#
Содержит в себе предупреждения и ошибки работы с базой данных. Обновляется каждые 15 минут с помощью работы Btk_SlowQueryHistoryUpdate
. Подробнее…
Хранимые поля
dcreate
- дата и время событияstype
- тип предупреждения
изBtk_MonitorDBActivityPkg.DBAlertTypes
:
«DBBloat», «AutoVacuumOff», «SlowTransaction», «SlowQuery», «FastGrowSize», «NotInScheduleJob»sfrom
- источникstypefrom
- тип источникаsshortinfo
- сообщениеsdescription
- описаниеsquery
- запрос
Скрипты взаимодействия с таблицой#
Регистрация#
Btk_MonitorDBActivityPkg.dataInstall();
Обновление#
Btk_MonitorDBActivityPkg.updateSlowQueryHistory();
Журнал выполнения медленных задач btk_slowqueryhistory
#
Журнал SQL-запросов, выполняющихся дольше 15 минут (время, определяющее какой запрос будет считаться долго выполняющимся определяется в Btk_MonitorDBActivityPkg#getIntervalToAcceptAsSlowQuery
). Обновляется каждые 15 минут с помощью работы Btk_SlowQueryHistoryUpdate
.
Хранимые поля
usename
- имя пользователяdcreate
- дата создания записи аудитаquery
- текст SQL-запросаnduration
- длительность [минут]state
- состояние выполнения \idle
- сессия БД находится в режиме ожидания. Т.е. подключение к БД есть, но в данный момент никаких запросов не выполняется. Стандартное ожидание для неактивных подключений, которые находятся в пуле подключений сервера приложенийactive
- сессия БД в данный момент выполняет запрос.idle in transaction
- сессия БД находится в режиме ожидания, но есть открытая транзакция. Опасное состояние сессии, т.к. длинные открытые транзакции отрицательно влияют на производительностьpostgresql
. Наличие такой сессии сигнализирует о проблеме.
sclienthostip
- IP-адрес источника запросаsappname
- название главной выборкиsform
- название формы
отображение, выборка, наименованиеsclusternode
- кластерный узелssid
- sid сеансаstack
- трассировка стекаsaction
- действие
Эта колонка будет заполнена, если:сессия принадлежит выполняемому фоновому заданию, в том числе интеграция
выполняется построение печатной формы
Скрипты взаимодействия с таблицой#
Регистрация#
Btk_MonitorDBActivityPkg.dataInstall();
Обновление#
Btk_MonitorDBActivityPkg.updateSlowQueryHistory();
Журнал размера таблиц основных классов btk_tablesizehistory
#
История размера таблиц PostgreSQL и системных классов. Позволяет отслеживать изменения размеров таблиц и индексов к ним во времени. Обновляется каждые 20 часов с помощью работы Btk_TableSizeHistoryUpdate
Хранимые поля
dcreate
- дата и времяsname
- название таблицыstablespace
- табличное пространствоnsize
- собственный размер таблицы [байт]nindexsize
- размер индексов [байт]кntotalsize
- общий размер [байт]
Скрипты взаимодействия с таблицой#
Регистрация#
Btk_MonitorDBActivityPkg.dataInstall();
Обновление#
Btk_MonitorDBActivityPkg.updateTableSizeHistory();
Журнал открытия выборок и выполнения операций selopenhistory
#
Это настраиваемая система, позволяющая вести расширенный аудит действий пользователя при открытии форм и элементов внутри формы. Пользовательский интерфейс доступен в Настройка системы > Аудит \ Аудит открытия форм и выполнения операций
. Для каждой конкретной формы можно включить\отключить аудит, настроить какие взаимодействия будут сохраняться:
Btk_SelSettingAudTypeApi#sFullAud
- признак ведения полного аудитаBtk_SelSettingAudTypeApi#sOnlySuccess
- признак ведения аудита успешно выполненных действий
Существует несколько событий, создающих запись аудита:
при открытии формы
EntityAvi#onShow()
- успешное открытие формыв
EntityAvi#onLoadMeta()
подписка на события неудачных открытий формEntityAvi#beforeCloseForm()
- закрытие формы
при вызове операции
в
EntityAvi#onLoadMeta()
подписка на события исполнения операций
Подробнее об аудите открытия форм и выполнения операция
Хранимые поля
id
- ИД записи в аудите для текущей выборкиsuser
- имя пользователяssel
- выборкаsrep
- отображениеscaption
- наименование отображенияdstart
- время открытияdend
- время закрытияgidobject
- глобальный идентификатор объекта взаимодействияstype
- тип взаимодействия,Btk_SelAuditPkg.SelAuditType
одно из списка: «Главная выборка», «Операция», «Детальная выборка»sparam
- параметры, с которыми открывалась выборкаsresult
- результат взаимодействияSelAuditResult
одно из списка: «Успешно», «Ошибка прикладного кода», «Ошибка доступа»soper
- операцияsopercaption
- наименование операцииserrortext
- текст ошибки
Скрипты взаимодействия с таблицой#
Регистрация#
Btk_SelAuditPkg.dataInstall()
Добавление записи#
Btk_SelAuditPkg.audInsert(
idSession: NLong,
id: NLong,
idParent: NLong,
sSel: NString,
sRep: NString,
sCaption: NString,
gidObject: NGid,
sParam: NString,
sType: NString,
sResult: NString = SelAuditResult.sSuccess,
sOper: NString,
sOperCaption: NString,
sErrorText: NString
)
Журнал аудита JEXL jexlexechistory
#
Содержит информацию о запуске и результате выполнения скриптов на языке JEXL.Пользовательский интерфейс доступен в Настройка системы > Аудит \ Аудит JEXL
.
Операции, которые вызывают создании записи в таблице аудита:
Btk_JexlScriptLibraryAvi.Card_Script#execScriptwithSettings()
Btk_JexlScriptRunnerAvi.Card#execScript()
Хранимые поля
id
- уникальный ключ записи аудитаsuser
- имя пользователяdstartexec
- начало исполненияdendexec
- конец исполненияsjexl
- текст скриптаnresult
- результат выполнения
1 - успех, 0 - ошибкаsstacktrace
- трассировка стека ошибкиgidsrc
- объект, из которого выполнялся вызов скриптаsaudinfo
-
Скрипты взаимодействия с таблицой#
Регистрация#
Btk_JexlScriptRunnerPkg.audDataInstal();
Добавление записи#
Btk_JexlScriptRunnerPkg.audInsert(
dpStartExec: NDate
,dEndExec: NDate
,spJexl: NString
,npResult: NNumber
,spStackTrace: NString = None.ns
,gidpSrc: NGid = None.ng
);
Логирование событий ИБ в формате CEF#
События информационной безопасности пишутся в логгер ru.bitec.app.gtk.audit.InfoSecLogger
Само сообщение отформатировано в формате Common Event Format
прим.
CEF:Version|Device Vendor|Device Product|Device Version|Signature ID|Name|Severity|[Extension]
События | Signature ID#
Таблицы ключ=значение для [Extension]
части CEF сообщения
Общие - Ключи есть в каждом сообщении где возможно
Ключ | Extension key
Описание
suid
Имя пользователя клиента
suser
ФИО клиента
spid
Session Id. Идентификатор сессии клиента
src
IP-адрес клиента
shost
Имя кластерной ноды
cs6Label
«Superuser»
cs6
Наличие прав администратора - true/false
end
Дата и время в которое было зарегистрировано событие
LoginSuccess - Успешная авторизация
Ключ | Extension key
Описание
suid
Имя пользователя клиента
suser
ФИО клиента
src
IP-адрес клиента
spt
Порт клиента
dst
IP-адрес сервера
dpt
Порт сервера
request
URL запроса
cs6Label
«Superuser»
cs6
Наличие прав администратора - true/false
end
Дата и время в которое было зарегистрировано событие
LoginFailure - Неуспешная авторизация
Ключ | Extension key
Описание
suid
Имя пользователя клиента
reason
Причина неуспешного входа
src
IP-адрес клиента
spt
Порт клиента
dst
IP-адрес сервера
dpt
Порт сервера
request
URL запроса
end
Дата и время в которое было зарегистрировано событие
LoginAttempt - Превышение количества неудачных попыток ввода пароля
Ключ | Extension key
Описание
suid
Имя пользователя клиента
src
IP-адрес клиента
spt
Порт клиента
dst
IP-адрес сервера
dpt
Порт сервера
request
URL запроса
end
Дата и время в которое было зарегистрировано событие
Session - Начало и остановка пользовательской сессии
Ключ | Extension key
Описание
Общие
Application - Открытие и закрытие выборки
Ключ | Extension key
Описание
Общие
cs1Label
«Application Name»
cs1
Имя приложения, выборка которого была открыта или закрыта
PasswordChange - Изменение пароля
Ключ | Extension key
Описание
Общие
duid
Имя пользователя которому сменили пароль
duser
ФИО пользователя которому сменили пароль
OutdatedProdPassword - Устарел продуктивный пароль (Сброс пароля)
Ключ | Extension key
Описание
Общие
duid
Имя пользователя которому нужно сменить пароль
duser
ФИО пользователя которому нужно сменить пароль
OutdatedTempPassword - Устарел временный пароль (Блокировка пользователя)
Ключ | Extension key
Описание
Общие
duid
Имя пользователя которому нужно запросить новый пароль
duser
ФИО пользователя которому нужно запросить новый пароль
JexlExec - Успешно/Неуспешно выполнен JEXL скрипт
Ключ | Extension key
Описание
Общие
cs1Label
«JEXL»
cs1
JEXL скрипт который выполняли
cs2Label
«Source»
cs2
GID источника выполнения
deviceCustomDate1Label
«ExecStart»
deviceCustomDate1
Дата и время начала выполнения
deviceCustomDate2Label
«ExecEnd»
deviceCustomDate2
Дата и время завершения выполнения
AuditSettings - Изменение настроек аудита
Ключ | Extension key
Описание
Общие
cs1Label
«Table Name»
cs1
Имя таблицы, настройки которой были изменены
cs3Label
«Old values»
cs3
Перечень старых атрибутов. Формат - «атрибут: новое значение»
cs4Label
«New values»
cs4
Перечень измененных атрибутов. Формат - «атрибут: новое значение»
UserPriv - Выдача и потеря привилегий пользователя
Ключ | Extension key
Описание
Общие
spriv
Пользователь, который получил или потерял привилегию
cs1
ФИО клиента
dpriv
Системное имя полученной привилегии(Профиль)
cs2
Наименование полученной привилегии(Профиль)
ProfilePriv - Выдача и потеря привилегий профиля
Ключ | Extension key
Описание
Общие
spriv
Профиль, который получил или потерял привилегию
cs1
Наименование полученной привилегии(Профиль)
dpriv
Системное имя полученной привилегии(Роль)
cs2
Наименование полученной привилегии(Роль)
UpdateRole - Изменения привилегий роли
Ключ | Extension key
Описание
Общие
spriv
Роль у которой изменили привилегии
cs1
Наименование Роли
dpriv
Класс в котором произошли изменения см. список ниже
cs2
Наименование класса в котором произошли изменения
cs3Label
«Old values»
cs3
Перечень старых атрибутов. Формат - «атрибут: новое значение»
cs4Label
«New values»
cs4
Перечень измененных атрибутов. Формат - «атрибут: новое значение»
Классы по которым ведутся события ИБ
Btk_AcRoleItemPrivGrant
Btk_AcRoleItemPrivTypeGrant
Btk_AcRoleObjPrivGrant
Btk_AcRoleObjPrivTypeGrant
Btk_AcRoleServerPriv
Btk_AcRoleStateChangeGrant
Настройка#
В директории Сервер\application\config добавить в logback-LoggerContext.xml
и logback-LoggerContext-session.xml
.
<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
<!-- syslogHost, port - ссылка на Syslog сервер -->
<syslogHost>localhost</syslogHost>
<port>514</port>
<facility>AUTHPRIV</facility>
<!-- Паттерн Syslog сообщения. (Обязательные Syslog поля) + %msg(CEF Сообщение)-->
<suffixPattern>%msg</suffixPattern>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<!--Здесь можно указать фильтрацию для событий
"*" - все события
прим.
<marker>Session</marker>
<marker>PasswordChange</marker>
-->
<marker>*</marker>
</evaluator>
<!--Правила фильтрации
Логировать только указанные события:
<OnMatch>NEUTRAL</OnMatch>
<OnMismatch>DENY</OnMismatch>
Логировать все кроме указанных событий:
<OnMatch>DENY</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
-->
<OnMatch>NEUTRAL</OnMatch>
<OnMismatch>DENY</OnMismatch>
</filter>
</appender>
Добавите сам логгер
<!--Добавьте над root'ом если не хоте чтобы логер не унаследовал от root'а level и другие аппендеры-->
<logger name="InfoSecLogger" level="ALL" additivity="false">
<appender-ref ref="SYSLOG"/>
</logger>
В результате получим SYSLOG CEF сообщение вида
Jan 31 16:09:10 DESKTOP-IPCDPC4 CEF:1|bitec|GlobalERP|0|LoginSuccess|Успешная авторизация|Medium|suid=admin suser=Кузнецов В.М. src=127.0.0.1 spt=56453 dst=localhost dpt=8080 request=http://localhost:8080/login/login.html cs6Label=Superuser cs6=true end=Jan 31 2025 16:09:10
Логирование DDL-операций btk_ddljournal
#
Журнал операций изменения структур базы данных. В журнале содержатся записи о таких операциях как CREATE
, ALTER
, DROP
, SECURITY LABEL
, COMMENT
, GRANT
и REVOKE
.
Для включения логирования операций требуется выполнить создание триггера. У пользователя, под которым подключается сервер при генерации таблиц, как правило прав на создание триггеров нет, поэтому включение нужно произвести вручную.
CREATE EVENT TRIGGER ddl_audit_trigger
ON ddl_command_end
EXECUTE FUNCTION log_ddl_operations()
Хранимые поля
dtimestamp
- Время окончания выполнения операции.sdbusername
- имя пользователя в текущем контексте выполнения.susername
- имя пользователя сеанса.smachinename
- наименование хоста клиента.sipaddress
- адрес клиента.sschema
- имя схемы.sentity
- измененный объект.sentitytype
- тип измененного объекта.sddl
- операция изменения структуры данных.
Наименование хоста клиента не будет логироваться, если в базе данных параметр log_hostname
выключен.
Включить его можно в конфиге БД, либо в консоли.