Передача базы данных 1С сторонним специалистам (франчайзи, фрилансерам или аутсорсинговым компаниям) для доработки, тестирования или исправления ошибок — стандартная практика. Однако руководство и служба безопасности клиентов часто выступают категорически против этого. Их страх вполне оправдан: утечка персональных данных сотрудников, базы контрагентов или коммерческих условий закупок может нанести компании непоправимый финансовый и репутационный ущерб. Более того, законодательство (например, Федеральный закон № 152-ФЗ «О персональных данных» в РФ) накладывает жесткие обязательства по защите персональных данных, и простая передача базы без согласия субъектов является прямым правонарушением.
В этой статье мы подробно разберем, как решить проблему недоверия клиентов, развеем мифы о невозможности безопасного обезличивания данных и рассмотрим три практических метода подготовки базы данных 1С к передаче разработчикам.
Часто заказчики и неопытные разработчики путают понятия шифрования (кодирования) и обезличивания (деперсонализации) данных. Заказчик может заявить: «Если вы напишете обработку, которая зашифрует данные, значит, вы сможете написать и обработку для их расшифровки. База все равно небезопасна!»
Проанализируем эту ситуацию. При классическом шифровании действительно используется ключ, с помощью которого данные можно вернуть в исходное состояние. Но при правильном обезличивании происходит не шифрование, а безвозвратное уничтожение или замена информации случайными значениями. Исходные данные просто затираются. Восстановить реальное имя контрагента или паспортные данные сотрудника после такой процедуры технически невозможно, так как в базе больше нет связей с исходными значениями.
Выясним, какие инструменты и подходы существуют для реализации этой задачи на практике.
Если конфигурация клиента построена на современной версии БСП (Библиотеки стандартных подсистем), в нее уже встроен мощный штатный механизм деперсонализации данных.
Рассмотрим по шагам, как запустить этот инструмент:
Функции для технического специалиста (в старых версиях — Все функции).Физические лица, Контрагенты, Сотрудники, Контактная информация).0c6299c688ab), а также изменять числовые значения (суммы документов) путем сдвига на случайный процент или умножения на коэффициент.Для более старых конфигураций, где БСП не используется, на портале ИТС (Информационно-технологического сопровождения) доступна внешняя обработка «Изменение конфиденциальной информации», выполняющая аналогичные функции.
Несмотря на доступность, стандартные обработки 1С имеют ряд существенных недостатков, о которых необходимо знать заранее:
ПередЗаписью, ПриЗаписи и многочисленные подписки на события. Это может привести к непредвиденному изменению логического состояния базы, пересчету итогов или ошибкам записи, из-за которых процесс прервется.ХранилищеЗначений), историю изменений объектов (версионирование), а также пароли интеграций и учетных записей почты в системных регистрах сведений.Этот способ подходит для крупных информационных систем, работающих под управлением СУБД (MS SQL Server, PostgreSQL), и требует участия квалифицированного системного администратора или разработчика.
Проанализируем суть метода: вместо медленной перезаписи объектов через интерфейс 1С, изменения вносятся напрямую в таблицы базы данных с помощью SQL-команд UPDATE и TRUNCATE TABLE. Это позволяет обработать миллионы записей за считанные минуты.
Пример алгоритма действий:
Контрагенты) физическим именам таблиц в СУБД (например, _Reference115).Важный нюанс: Прямая модификация таблиц СУБД нарушает лицензионное соглашение фирмы «1С». Однако, поскольку операция проводится на тестовой копии базы, которая никогда больше не будет использоваться в качестве рабочей, этот шаг является оправданным компромиссом ради безопасности и скорости.
Если штатные инструменты не подходят, а прямого доступа к СУБД нет, мы можем разработать собственную обработку на языке 1С, которая быстро и аккуратно очистит или заменит конфиденциальные данные.
Разберем по шагам логику построения такой обработки на примере деперсонализации справочника Контрагенты. Для того чтобы обойти срабатывание ненужных подписок на события и ускорить запись, мы будем использовать свойство объекта ОбменДанными.Загрузка = Истина.
Посмотрим на пример кода:
// Процедура обезличивания справочника Контрагенты
Процедура ОбезличитьКонтрагентов() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| НЕ Контрагенты.ЭтоГруппа";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Счетчик = 1;
Пока Выборка.Следующий() Цикл
ОбъектКонтрагент = Выборка.Ссылка.ПолучитьОбъект();
// Изменяем наименования на шаблонные значения с порядковым номером
ОбъектКонтрагент.Наименование = "Контрагент № " + Формат(Счетчик, "ЧГ=0");
ОбъектКонтрагент.НаименованиеПолное = "Общество с ограниченной ответственностью ""Контрагент № " + Формат(Счетчик, "ЧГ=0") + """";
// Заменяем ИНН и КПП на фиктивные стандартные значения
ОбъектКонтрагент.ИНН = "7700000000";
ОбъектКонтрагент.КПП = "770101001";
// ВАЖНО: Отключаем обработчики событий (подписки на события) для ускорения работы
ОбъектКонтрагент.ОбменДанными.Загрузка = Истина;
Попытка
ОбъектКонтрагент.Записать();
Исключение
ЗаписьЖурналаРегистрации("ОбезличиваниеДанных", УровеньЖурналаРегистрации.Ошибка, , ,
"Не удалось перезаписать объект: " + ОбъектКонтрагент.Ссылка + ". Ошибка: " + ОписаниеОшибки());
КонецПопытки;
Счетчик = Счетчик + 1;
КонецЦикла;
ПоказатьПредупреждение(, "Обезличивание справочника Контрагенты успешно завершено!");
КонецПроцедуры
Для полной безопасности нам также необходимо полностью очистить контактную информацию (адреса, телефоны, email), которая в современных конфигурациях хранится в табличных частях или в специальном регистре сведений. Рассмотрим пример очистки регистра сведений КонтактнаяИнформация:
// Процедура очистки всей контактной информации в базе данных
Процедура ОчиститьКонтактнуюИнформацию() Экспорт
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
// Записываем пустой набор записей без отборов, чтобы полностью очистить регистр
НаборЗаписей.ОбменДанными.Загрузка = Истина;
Попытка
НаборЗаписей.Записать(Истина);
ЗаписьЖурналаРегистрации("ОбезличиваниеДанных", УровеньЖурналаРегистрации.Информация, , ,
"Регистр контактной информации успешно очищен.");
Исключение
ЗаписьЖурналаРегистрации("ОбезличиваниеДанных", УровеньЖурналаРегистрации.Ошибка, , ,
"Ошибка при очистке регистра контактной информации: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Технические меры деперсонализации будут максимально эффективны, если подкрепить их правильным юридическим оформлением отношений с заказчиком. Специалистам по автоматизации рекомендуется соблюдать следующие правила:
Сочетание строгой технической деперсонализации данных, грамотного использования встроенных механизмов платформы 1С и юридической ответственности позволит полностью снять страхи заказчиков и обеспечить комфортные и безопасные условия для разработки и поддержки программных продуктов.