Многие администраторы и разработчики 1С сталкиваются с ситуацией, когда стандартных настроек Журнала регистрации (ЖР) становится недостаточно. По умолчанию платформа фиксирует только «активные» действия: создание, изменение или удаление объектов. Однако в целях информационной безопасности часто требуется знать, кто именно просматривал карточку контрагента, читал конфиденциальный договор или формировал отчет с суммами продаж, даже если никаких изменений внесено не было.
В этой статье мы подробно разберем, почему штатные «галочки» в Конфигураторе не помогают решить эту задачу, и рассмотрим современные программные способы настройки полноценного аудита доступа к данным.
Разберем причину такого поведения системы. Журнал регистрации — это инструмент, который при максимальных настройках («Все события») фиксирует транзакционные действия. Открытие формы справочника или документа (например, Справочник.Контрагенты) не является транзакцией записи в базу данных. С точки зрения платформы, чтение данных для отображения на экране — это штатная операция, которая происходит постоянно, и логирование каждого такого шага создало бы колоссальную нагрузку на дисковую подсистему.
Тем не менее, когда возникает необходимость вычислить «утечку» информации, нам нужно настроить систему так, чтобы она фиксировала именно факт чтения. Рассмотрим, как это реализовать.
Начиная с версии платформы 8.3.13, в 1С появился встроенный механизм «Регистрация доступа к данным». Это наиболее правильный и современный метод. Он позволяет фиксировать в ЖР событие «Доступ к данным» (Data access) при чтении определенных полей объектов.
Проанализируем, как включить этот механизм. Он не активируется в интерфейсе Конфигуратора, его нужно настраивать программно. Для этого используется метод УстановитьИспользованиеСобытияЖурналаРегистрации(). Рассмотрим пример кода, который включает аудит для справочника Контрагенты:
// Включаем регистрацию доступа для конкретных полей справочника
Поля = "Наименование, ИНН, Телефон";
УстановитьИспользованиеСобытияЖурналаРегистрации("_$Data$.Read", Истина, "Справочник.Контрагенты", Поля);
После выполнения этого кода (например, в процедуре ПриНачалеРаботыСистемы), при любом запросе к указанным полям (будь то открытие формы или вывод в отчет), платформа автоматически создаст запись в Журнале регистрации.
Если вам нужно фиксировать не просто чтение полей, а именно факт открытия пользователем конкретной формы, мы можем использовать программный вызов записи в ЖР. Чтобы не изменять типовую конфигурацию (например, УТ 11.2), лучше всего воспользоваться механизмом Расширений.
Разберем по шагам, как это реализовать:
ФормаОбъекта справочника Контрагенты) и добавляем ее в расширение.ПриСозданииНаСервере создаем метод «После».Внутри обработчика пропишем следующий код:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
ИмяСобытия = "Доступ.ОткрытиеКарточки";
ТекстСообщения = СтрШаблон("Пользователь просмотрел карточку контрагента: %1 (ИНН: %2)",
Объект.Ссылка, Объект.ИНН);
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,
Объект.Ссылка.Метаданные(), Объект.Ссылка, ТекстСообщения);
КонецПроцедуры
Этот метод позволяет гибко настраивать логирование. Мы можем записывать в комментарий любые данные, которые помогут в дальнейшем анализе.
Выясним, как отследить, кто формировал отчеты. Простое открытие формы отчета малоинформативно, так как пользователь мог его и не запустить. Нам важно зафиксировать момент нажатия кнопки «Сформировать».
Для этого в модуле объекта отчета (в схеме компоновки данных — СКД) следует использовать событие ПриКомпоновкеРезультата. Выглядеть это будет так:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
ТекстЛога = "Отчет сформирован. Параметры: ";
Для Каждого Параметр Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
Если Параметр.Использование Тогда
ТекстЛога = ТекстЛога + СтрШаблон("%1 = %2; ", Параметр.Параметр, Параметр.Значение);
КонецЕсли;
КонецЦикла;
ЗаписьЖурналаРегистрации("Отчеты.Формирование", УровеньЖурналаРегистрации.Информация,
ЭтотОбъект.Метаданные(), , ТекстЛога);
КонецПроцедуры
Важный момент: если отчет построен на базе типовой подсистемы «Варианты отчетов» из БСП, то подобные события уже могут логироваться в специализированных регистрах сведений (например, СтатистикаРаботыПользователей). Проверьте наличие этих данных перед написанием своего кода.
Прежде чем внедрять тотальное логирование всех просмотров, необходимо проанализировать возможные последствия. Каждая запись ЗаписьЖурналаРегистрации — это запись на диск, которая требует ресурсов.
.lgp или .lgf) вырастет до гигантских размеров за считанные дни..lgp). Он значительно быстрее работает с большими объемами данных и менее подвержен повреждениям при интенсивной записи. Переключить формат можно в Конфигураторе через «Администрирование — Настройка журнала регистрации».Если ситуация со «сливом» информации критична, одними средствами 1С задачу решить сложно. Профессиональные системы DLP (Data Loss Prevention) позволяют отслеживать действия пользователя не только внутри программы, но и за ее пределами: копирование данных в буфер обмена, создание скриншотов, сохранение файлов на внешние носители или отправку по почте.
В рамках самой 1С также стоит пересмотреть настройки RLS (Record Level Security). Вместо того чтобы пытаться «поймать за руку» того, кто просматривает лишнее, лучше ограничить доступ на уровне прав так, чтобы менеджеры видели только «своих» контрагентов и только «свои» продажи. Это снимет проблему избыточного любопытства сотрудников.
Подведем итог нашему разбору. Для реализации полноценного аудита просмотров в 1С 8.3 следует:
УстановитьИспользованиеСобытияЖурналаРегистрации для версий платформы 8.3.13+.ЗаписьЖурналаРегистрации в формы объектов, если требуется более детальное описание события.