Как безопасно передать базу данных 1С стороннему разработчику и защитить коммерческую тайну

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Передача базы данных 1С сторонним специалистам (франчайзи, фрилансерам или аутсорсинговым компаниям) для доработки, тестирования или исправления ошибок — стандартная практика. Однако руководство и служба безопасности клиентов часто выступают категорически против этого. Их страх вполне оправдан: утечка персональных данных сотрудников, базы контрагентов или коммерческих условий закупок может нанести компании непоправимый финансовый и репутационный ущерб. Более того, законодательство (например, Федеральный закон № 152-ФЗ «О персональных данных» в РФ) накладывает жесткие обязательства по защите персональных данных, и простая передача базы без согласия субъектов является прямым правонарушением.

В этой статье мы подробно разберем, как решить проблему недоверия клиентов, развеем мифы о невозможности безопасного обезличивания данных и рассмотрим три практических метода подготовки базы данных 1С к передаче разработчикам.

Миф о «кодировании» и реальность деперсонализации

Часто заказчики и неопытные разработчики путают понятия шифрования (кодирования) и обезличивания (деперсонализации) данных. Заказчик может заявить: «Если вы напишете обработку, которая зашифрует данные, значит, вы сможете написать и обработку для их расшифровки. База все равно небезопасна!»

Проанализируем эту ситуацию. При классическом шифровании действительно используется ключ, с помощью которого данные можно вернуть в исходное состояние. Но при правильном обезличивании происходит не шифрование, а безвозвратное уничтожение или замена информации случайными значениями. Исходные данные просто затираются. Восстановить реальное имя контрагента или паспортные данные сотрудника после такой процедуры технически невозможно, так как в базе больше нет связей с исходными значениями.

Выясним, какие инструменты и подходы существуют для реализации этой задачи на практике.

Способ 1. Штатные инструменты от фирмы «1С»

Если конфигурация клиента построена на современной версии БСП (Библиотеки стандартных подсистем), в нее уже встроен мощный штатный механизм деперсонализации данных.

Рассмотрим по шагам, как запустить этот инструмент:

  1. Откройте копию базы данных 1С под учетной записью администратора. Важно: никогда не запускайте обработку обезличивания на рабочей базе, так как изменения необратимы!
  2. Перейдите в меню Функции для технического специалиста (в старых версиях — Все функции).
  3. Найдите в списке обработок элемент «Скрытие конфиденциальной информации».
  4. В открывшемся окне выберите объекты, данные которых необходимо скрыть (например, справочники Физические лица, Контрагенты, Сотрудники, Контактная информация).
  5. Настройте правила замены. Система позволяет заменять текстовые поля случайными строками, хэш-кодами (например, превращая Имя в строку вида 0c6299c688ab), а также изменять числовые значения (суммы документов) путем сдвига на случайный процент или умножения на коэффициент.
  6. Запустите процесс выполнения.

Для более старых конфигураций, где БСП не используется, на портале ИТС (Информационно-технологического сопровождения) доступна внешняя обработка «Изменение конфиденциальной информации», выполняющая аналогичные функции.

Скрытые технические проблемы штатного скрытия данных

Несмотря на доступность, стандартные обработки 1С имеют ряд существенных недостатков, о которых необходимо знать заранее:

Способ 2. Обезличивание на уровне СУБД (прямые SQL-запросы)

Этот способ подходит для крупных информационных систем, работающих под управлением СУБД (MS SQL Server, PostgreSQL), и требует участия квалифицированного системного администратора или разработчика.

Проанализируем суть метода: вместо медленной перезаписи объектов через интерфейс 1С, изменения вносятся напрямую в таблицы базы данных с помощью SQL-команд UPDATE и TRUNCATE TABLE. Это позволяет обработать миллионы записей за считанные минуты.

Пример алгоритма действий:

  1. С помощью специальной обработки 1С получаем соответствие имен метаданных (например, справочника Контрагенты) физическим именам таблиц в СУБД (например, _Reference115).
  2. Генерируем SQL-скрипт, который обнуляет или заменяет данные в конфиденциальных колонках таблиц СУБД. Например, заменяет ИНН на случайный набор цифр, а наименования — на шаблонные строки.
  3. Полностью очищаем таблицы прикрепленных файлов и регистры истории версий.
  4. Выполняем скрипт непосредственно на сервере СУБД.

Важный нюанс: Прямая модификация таблиц СУБД нарушает лицензионное соглашение фирмы «1С». Однако, поскольку операция проводится на тестовой копии базы, которая никогда больше не будет использоваться в качестве рабочей, этот шаг является оправданным компромиссом ради безопасности и скорости.

Способ 3. Создание собственной кастомной обработки деперсонализации

Если штатные инструменты не подходят, а прямого доступа к СУБД нет, мы можем разработать собственную обработку на языке 1С, которая быстро и аккуратно очистит или заменит конфиденциальные данные.

Разберем по шагам логику построения такой обработки на примере деперсонализации справочника Контрагенты. Для того чтобы обойти срабатывание ненужных подписок на события и ускорить запись, мы будем использовать свойство объекта ОбменДанными.Загрузка = Истина.

Посмотрим на пример кода:


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

Для полной безопасности нам также необходимо полностью очистить контактную информацию (адреса, телефоны, email), которая в современных конфигурациях хранится в табличных частях или в специальном регистре сведений. Рассмотрим пример очистки регистра сведений КонтактнаяИнформация:


// Процедура очистки всей контактной информации в базе данных
Процедура ОчиститьКонтактнуюИнформацию() Экспорт
    
    НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
    
    // Записываем пустой набор записей без отборов, чтобы полностью очистить регистр
    НаборЗаписей.ОбменДанными.Загрузка = Истина;
    
    Попытка
        НаборЗаписей.Записать(Истина);
        ЗаписьЖурналаРегистрации("ОбезличиваниеДанных", УровеньЖурналаРегистрации.Информация, , , 
            "Регистр контактной информации успешно очищен.");
    Исключение
        ЗаписьЖурналаРегистрации("ОбезличиваниеДанных", УровеньЖурналаРегистрации.Ошибка, , , 
            "Ошибка при очистке регистра контактной информации: " + ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

Юридическая сторона вопроса: как правильно выстроить работу

Технические меры деперсонализации будут максимально эффективны, если подкрепить их правильным юридическим оформлением отношений с заказчиком. Специалистам по автоматизации рекомендуется соблюдать следующие правила:

  1. Подписание Соглашения о неразглашении (NDA): Перед началом любых работ подписывайте детальное соглашение о конфиденциальности. В нем должны быть четко прописаны штрафы за утечку информации и обязанности сторон.
  2. Договор поручения на обработку персональных данных: Если передача реальной базы неизбежна (например, для расследования сложной ошибки учета, воспроизводящейся только на конкретных данных), оформите официальное поручение на обработку персональных данных в соответствии с требованиями законодательства.
  3. Регламент уничтожения тестовых копий: Зафиксируйте в договоре обязательство безвозвратного удаления тестовых и девелоперских копий баз данных с носителей и серверов разработчика в течение определенного срока после сдачи проекта.

Сочетание строгой технической деперсонализации данных, грамотного использования встроенных механизмов платформы 1С и юридической ответственности позволит полностью снять страхи заказчиков и обеспечить комфортные и безопасные условия для разработки и поддержки программных продуктов.

← На главную