Аудит данных#
Аудит данных предназначен для регистрации операций над экземплярами бизнес-объектов и позволяет отследить, какой пользователь, в какое время и с какого рабочего места выполнил изменение.
Фиксируются следующие операции:
создание сущностей;
изменение значений атрибутов;
удаление сущностей.
Для каждой операции сохраняются:
значения атрибутов до и после изменения в формате JSON;
наименования ссылочных атрибутов для удобства чтения;
идентификатор пользователя;
IP-адрес рабочего места;
дата и время операции;
тип действия
Btk_AuditAction;дополнительный контекст выполнения операции.
Журнал аудита данных используется для просмотра изменений аудируемых бизнес-объектов. Доступность пользовательского интерфейса зависит от конфигурации системы и настроек разделов аудита.
Просмотр данных аудита доступен:
из карточки объекта через операцию Аудит объекта;
из общего раздела аудита по пути
Настройка системы > Аудит > Аудит данных.
Интерфейс аудита данных#
Интерфейс аудита данных позволяет просматривать записи аудита по выбранному классу или по конкретному объекту.
Основной раздел Аудит данных используется для просмотра записей по аудируемым классам. Окно Аудит объекта открывается из карточки объекта и показывает историю изменений выбранного объекта.
Общий раздел «Аудит данных»#
Основная форма аудита данных состоит из списка аудируемых классов и детализации по выбранному классу.
В левой части формы отображается список классов, для которых доступен просмотр аудита. Для построения детализации необходимо выбрать класс в этом списке.
В списке классов доступны:
Поле |
Описание |
|---|---|
|
Системное имя класса |
|
Наименование класса |
В центральной части формы отображаются фильтры и список записей аудита по выбранному классу.
Поле |
Описание |
|---|---|
|
Период отбора по дате изменения |
|
Пользователь, выполнивший изменение |
|
Глобальный идентификатор измененного объекта |
|
Наименование измененного объекта |
|
Класс измененного объекта |
|
Глобальный идентификатор root-объекта или бизнес-объекта |
|
Наименование root-объекта или бизнес-объекта |
|
Root-класс или класс бизнес-объекта |
|
Системное имя измененного атрибута |
|
Значение атрибута |
|
Тип события аудита |
Примечание
Даты в форме не являются обязательными для заполнения, но для больших аудит-таблиц рекомендуется всегда задавать период. Это уменьшает объем выборки и ускоряет построение списка записей.
Список записей аудита#
В списке записей отображаются события по выбранному классу с учетом заданных фильтров.
Колонка |
Описание |
|---|---|
Дата, время |
Дата и время изменения |
Пользователь |
Пользователь, выполнивший изменение |
Тип события |
Тип события аудита: создание, изменение или удаление |
Примечание |
Дополнительное примечание к записи аудита |
Наименование класса |
Класс измененного объекта |
gid Объекта |
Глобальный идентификатор измененного объекта |
Заголовок объекта |
Заголовок измененного объекта |
gid объекта БО |
Глобальный идентификатор бизнес-объекта |
Заголовок объекта БО |
Заголовок бизнес-объекта |
Детализация записи#
В нижней части формы отображается детализация выбранной записи аудита. Она показывает, какие атрибуты были изменены и какие значения были сохранены до и после операции.
Колонка |
Описание |
|---|---|
Системное имя атрибута |
Системное имя измененного атрибута |
Наименование атрибута |
Отображаемое наименование измененного атрибута |
Старое значение |
Значение атрибута до изменения |
Новое значение |
Значение атрибута после изменения |
Заголовок старого значения |
Наименование ссылочного значения до изменения |
Заголовок нового значения |
Наименование ссылочного значения после изменения |
Способ ввода значений |
Способ ввода или формирования значения атрибута |
Операция изменившая атрибут |
Операция, при выполнении которой был изменен атрибут |
Окно «Аудит объекта»#
Окно Аудит объекта вызывается из карточки объекта через группу операций Информация или контекстное меню.
Система отображает изменения текущего объекта и входящих в него объектов:
при открытии от документа — изменения по документу и его позициям;
при открытии от позиции — изменения только по этой позиции.
Просмотр аудита от объекта не показывает данные об удаленных объектах. Для просмотра истории удаленных объектов используйте общий раздел аудита:
Настройка системы > Аудит > Аудит данных.
Настройка аудита#
Настройка аудита доступна по пути:
Настройка системы > Сущности > Классы > Редактировать > Характеристики.
Чтобы включить аудит для класса:
Откройте приложение Настройка системы.
Перейдите в раздел
Сущности > Классы.Найдите и выберите нужный класс.
На вкладке Характеристики установите признак Вести аудит.
Если класс не является шапкой бизнес-объекта, включите аудит также для класса-шапки.
Для класса-шапки выполните операцию Создать оболочку аудита.
Операция Создать оболочку аудита создает таблицу аудита в схеме AUD.
Для каждого корневого аудируемого класса создается отдельная таблица. Создание и регистрация выполняются через Btk_AuditPkg:
генерация таблицы —
generateAudTableByRootClass(...);массовая генерация —
dataInstall().
При необходимости таблицы могут размещаться в отдельном табличном пространстве, задаваемом параметром sAudTableSpace.
События формирования записей#
Запись аудита формируется автоматически при выполнении операций:
создание сущности;
изменение сущности;
удаление сущности.
Изменения обрабатываются в SessionImpl#flush():
До применения изменений собираются старые значения.
После применения изменений собираются новые значения.
После
flushвыполняется запись в таблицу аудита.
Примечание
Сбор информации о значениях атрибутов выполняется до и после применения изменений сессии к базе данных. Сама запись в аудит выполняется после вызова SessionImpl#flush().
Ключевые механизмы формирования записей:
автоматическая запись через
beforeFlushиafterFlush;программная запись через
insertRow(...)иinsertRowForced(...).
Особенности:
в служебных сценариях аудит может быть временно отключен через
forAuditDisabled(...);для системных операций используется принудительная запись через
insertRowForced(...).
Хранение данных#
Для каждого класса-шапки бизнес-объекта создается отдельная таблица аудита в схеме AUD.
Имя таблицы формируется по правилу:
aud.<системное имя класса-шапки бизнес-объекта>_dzaud
Примеры:
aud.Btk_User_dzaud— аудит пользователей;aud.Bs_Goods_dzaud— аудит номенклатуры.
Такой подход позволяет:
изолировать аудит по корневым сущностям;
управлять ростом данных по отдельным классам.
Для таблиц создаются:
стандартные индексы по основным полям фильтрации;
GIN-индексы по JSON-полям.
Фактический объем зависит от количества записей, объема JSON-данных и структуры сохраняемых изменений.
Хранимые поля#
Каждая таблица аудита содержит базовый набор полей:
Поле |
Описание |
|---|---|
|
Идентификатор класса-шапки бизнес-объекта |
|
GID класса-шапки бизнес-объекта |
|
Заголовок класса-шапки бизнес-объекта |
|
Идентификатор класса, в котором произошло изменение |
|
GID измененного объекта |
|
Заголовок измененного объекта |
|
Идентификатор действия аудита |
|
Значения атрибутов до изменения в формате JSON |
|
Новые значения измененных атрибутов в формате JSON |
|
Наименования ссылочных атрибутов до изменения в формате JSON |
|
Новые наименования измененных ссылочных атрибутов в формате JSON |
|
Дополнительная информация об операции |
|
Типы ввода атрибутов |
|
Дата и время изменения |
|
Примечание |
|
Пользователь, выполнивший операцию |
|
IP-адрес клиентского рабочего места |
Программные интерфейсы#
Основная логика работы с аудитом данных реализована в Btk_AuditPkg.
Ключевые методы:
Btk_AuditPkg().isEnabledAudit()— проверяет, включен ли аудит в текущей сессии;Btk_AuditPkg().setEnabledAudit(true)— включает или отключает аудит в рамках текущей сессии;Btk_AuditPkg().generateAudTableByRootClass(...)— создает аудит-таблицу для корневого класса;Btk_AuditPkg().dataInstall()— выполняет массовую генерацию аудит-таблиц;Btk_AuditPkg().insertRow(...)— добавляет запись в аудит вручную;Btk_AuditPkg().insertRowForced(...)— добавляет запись в аудит принудительно;Btk_AuditPkg().isAudTableValid(...)— проверяет корректность аудит-таблицы;Btk_AuditPkg().forAuditDisabled(...)— временно отключает аудит для служебного сценария.
Перенос таблиц аудита#
Чтобы перенести таблицы аудита в другое табличное пространство:
Откройте приложение Настройка системы.
Перейдите в раздел
Настройки и сервисы > Настройки модулей системы > Общие настройки модулей.Выберите модуль
btk.В поле Табличное пространство аудита укажите новое значение.
Выполните операцию Скачать файл со скриптом переноса таблиц аудита.
Выполните полученный SQL-скрипт в среде управления базой данных.
Хранение и очистка#
Журнал аудита данных является одним из самых быстрорастущих источников данных.
Объем данных зависит:
от количества аудируемых классов;
от количества изменений по каждому классу;
от размера JSON-полей;
от структуры сохраняемых изменений.
Единый срок хранения для всех классов не рекомендуется, так как нагрузка и значимость данных могут отличаться по разным сущностям.
Рекомендуемый подход:
для массовых операционных классов использовать короткий срок хранения;
для критичных бизнес-объектов использовать более длительный срок хранения.
Ориентиры:
30–90 дней — для высоконагруженных классов;
более длительное хранение — при наличии бизнес-требований.
Регулярная очистка обязательна, так как аудит данных быстро увеличивает объем таблиц и индексов.
Рекомендуется:
регулярно, например ежемесячно, анализировать рост таблиц;
выполнять очистку по отдельным аудит-таблицам;
при необходимости сокращать срок хранения;
использовать архивирование для длительного хранения;
пересматривать целесообразность аудита для отдельных сущностей.