Чёрный пояс 1С. Multi-tenancy на 40 юрлиц в одной базе: разделители, условное разделение и профили безопасности
40 дочерних обществ, одна информационная база, и требование, которое звучит просто, а реализуется через тонкости, о которых редко пишут: изолировать деньги и документы каждого ДЗО друг от друга, но оставить общим справочник контрагентов и НСИ. Один неверно выбранный режим разделителя — и вы либо потеряете изоляцию, либо не сможете создать ни одного предопределённого элемента.
Легенда практического занятия
Единая ИБ ведёт учёт по 40 ДЗО холдинга. Транзакционные документы должны быть изолированы по организациям. Справочник Контрагенты и НСИ — общие для всей базы. Отдельная сложность: часть ДЗО должна видеть склады изолированно, другая часть — совместно.
Задание
- Спроектируйте схему общего реквизита-разделителя
Организация: чем отличаются режимыНезависимоиНезависимо и совместно, и в каком из них запрещено создание предопределённых элементов. - Реализуйте условное разделение для справочника
Склады, чтобы разные ДЗО видели его изолированно или совместно. - Опишите ограничения обновления полнотекстового поиска (ППС) в разделённой ИБ.
- Настройте профиль безопасности: ограничьте доступ к файловой системе каталогом
/tmp/vokas/и заблокируйте бесконтрольныйВыполнить()/Вычислить().
1. Два режима разделителей — и когда каждый ломается
Режим «Независимо» — полная изоляция. Разделитель недоступен в объектной модели, запросах и RLS напрямую, а GUID ссылок могут совпадать в разных областях данных. Это то, что нужно для транзакционных документов ДЗО: каждая область данных не знает о существовании других. Плюс — поддерживается расширение данных.
Режим «Независимо и совместно» — разделитель виден в объектной модели, запросах, RLS и выгрузках, а ссылки объектов гарантированно уникальны во всей базе. Это нужно для справочника Контрагенты, который должен быть виден и адресуем из любой области.
2. Условное разделение складов
Реализуется через свойство общего реквизита «Условное разделение»: в качестве объекта управления выступает константа или реквизит типа Булево, который сам не входит в состав этого же разделителя. Если условное разделение выключено для конкретной области данных, при чтении и записи используется значение разделителя по умолчанию — то есть склад фактически становится общим для тех ДЗО, где признак выключен, и изолированным там, где включён. Именно так закрывается требование «одни ДЗО видят склады раздельно, другие — совместно», управляя признаком на уровне реквизита организации (или абонента), а не переписывая структуру данных под каждый случай.
3. Полнотекстовый поиск в разделённой базе
Физический индекс ППС — один общий для всей ИБ, независимо от количества областей данных. Ключевое архитектурное ограничение: обновление и слияние индекса ППС невозможно выполнить, если в текущем сеансе активен хотя бы один разделитель. Решение — регламентное задание по обновлению ППС должно быть настроено как неразделённое: выполняться в сеансе, где все разделители выключены. Если про это забыть, регламентное задание будет тихо падать или не выполняться вовсе, а причину придётся вылавливать по логам.
4. Профиль безопасности: файловая система и Выполнить()
Доступ к файловой системе ограничивается не прямым запретом путей, а настройкой виртуального каталога: виртуальный путь (например, тот, что возвращает КаталогВременныхФайлов()) сопоставляется с разрешённым физическим каталогом /tmp/vokas/ на сервере. Доступ к любым другим физическим каталогам платформа блокирует автоматически — прикладной код не может выйти за пределы сопоставленного пути, даже если попытается обратиться напрямую.
Контроль Выполнить() и Вычислить(): в свойствах профиля безопасности нужно сбросить флаг «Разрешён полный доступ к внешним модулям». После этого прикладное решение сможет использовать оба оператора только внутри явно установленного безопасного режима — то есть с предварительной валидацией исполняемого кода, а не бесконтрольно.
Что проверить у себя на проекте
- Не оказался ли справочник с предопределёнными элементами случайно в режиме «Независимо и совместно» — платформа не даст создать предопределённые записи, и это вскроется не сразу.
- Настроено ли регламентное задание обновления ППС как неразделённое, или оно молча не выполняется в сеансах с активными разделителями.
- Действительно ли профиль безопасности ограничивает файловую систему через сопоставление виртуального каталога, а не полагается на права ОС — это разные уровни защиты.
Создать токен →