Администрирование · 11 мин
RLS в 1С: как работает ограничение доступа на уровне записей
Как работает RLS в 1С: механизм ограничения доступа на уровне записей, шаблоны, роли, параметры сеанса, типовые ошибки настройки и проверка результата.
RLS (Record Level Security) — механизм платформы 1С:Предприятие, который ограничивает доступ пользователей не к целым таблицам, а к отдельным записям внутри них. Если обычные права роли отвечают на вопрос «может ли менеджер читать документы реализации», то RLS отвечает на вопрос «какие именно документы реализации он увидит» — например, только по своей организации или своему складу.
Механизм встроен в типовые конфигурации (ERP, УТ, Бухгалтерия, ЗУП) и работает прозрачно: пользователь открывает список документов, а система автоматически добавляет к запросу условие отбора. Пользователь даже не подозревает, что часть данных скрыта — для него список выглядит полным. При этом попытка открыть «чужой» документ по прямой ссылке вернет ошибку доступа.
Понимание RLS важно не только разработчикам, но и администраторам: некорректная настройка приводит либо к утечке данных (пользователь видит лишнее), либо к блокировке работы (не видит свои документы), либо к резкому падению производительности запросов. Ниже разобрано, как устроен механизм, как его настроить и как проверить результат.
Как устроен механизм RLS на уровне платформы
Технически RLS реализован через шаблоны ограничения доступа, которые хранятся в ролях конфигурации. Для каждого объекта метаданных (справочника, документа, регистра) и каждого вида доступа (чтение, добавление, изменение, удаление) в роли можно задать текст ограничения на специальном языке — диалекте языка запросов 1С.
Когда пользователь выполняет любое действие с данными — открывает список, проводит документ, строит отчет — платформа незаметно модифицирует запрос к базе данных: к нему присоединяется условие из шаблона RLS. Это происходит на уровне ядра, поэтому обойти ограничение через отчет, обработку или консоль запросов нельзя: отбор сработает везде.
Шаблон ограничения обычно ссылается на параметры — например, на параметр сеанса «ТекущийПользователь» или на функциональную таблицу разрешенных значений. Простейший пример логики: «показать документ, если его организация входит в список организаций, разрешенных текущему пользователю». Список разрешенных значений типовые конфигурации хранят в специальных регистрах сведений.
Из каких компонентов складывается работа RLS
Чтобы ограничение заработало, в системе должны быть согласованы несколько элементов. Отсутствие любого из них — типичная причина «RLS не работает».
- Роль с шаблоном ограничения. В конфигураторе у роли для объекта метаданных в поле «Ограничение доступа» задан текст условия. В типовых конфигурациях такие шаблоны уже поставляются.
- Параметры сеанса. При входе пользователя система вычисляет параметры сеанса (текущий пользователь, разрешенные значения), на которые ссылается шаблон.
- Данные о разрешенных значениях. Регистры сведений, где хранится соответствие «пользователь — доступные организации/склады/контрагенты». В типовых решениях их заполняет механизм групп доступа.
- Профили и группы доступа. Пользовательский интерфейс настройки: администратор не правит роли вручную, а включает пользователя в группу доступа с нужными разрешенными значениями.
Важно понимать связь: группы доступа в пользовательском режиме только заполняют регистры разрешенных значений, а реальную фильтрацию выполняет шаблон RLS в роли. Если шаблон в роли отсутствует или отключен, никакие группы доступа эффекта не дадут.
Как включить и настроить RLS в типовой конфигурации
В типовых решениях на базе БСП (Библиотека стандартных подсистем) настройка ведется из пользовательского режима, без конфигуратора. Общий порядок одинаков для ERP, УТ, КА и близок для ЗУП.
- 1Включите в настройках доступа опцию ограничения доступа на уровне записей (раздел администрирования, настройки прав и пользователей).
- 2Создайте профиль групп доступа и отметьте в нем нужные роли и виды доступа с ограничением — например, доступ по организациям.
- 3Создайте группу доступа на основе профиля и укажите разрешенные значения: конкретные организации, склады, подразделения.
- 4Добавьте пользователей в группу доступа.
- 5Перезапустите сеанс пользователя или дождитесь обновления кэша прав, затем проверьте видимость данных под этим пользователем.
После включения опции система начинает заполнять служебные регистры разрешенных значений. В больших базах это обновление может занять заметное время — планируйте включение на нерабочие часы и следите за фоновыми заданиями обновления доступа.
Настройка через конфигуратор для собственных разработок
Если вы дорабатываете конфигурацию, шаблон RLS пишется вручную в свойствах роли: палитра свойств объекта метаданных, поле «Ограничение доступа», кнопка открытия конструктора. В тексте шаблона доступны параметры через символ «&» и обращение к параметрам сеанса. После изменения роли нужно обновить конфигурацию базы данных и проверить, что у целевых пользователей нет второй роли, дающей полный доступ к той же таблице, — права в 1С суммируются.
Как RLS влияет на производительность
Каждый запрос к защищенной таблице получает дополнительное условие, часто с соединением к регистру разрешенных значений. На небольших базах это незаметно, но на объемах в миллионы записей сложный шаблон способен замедлить списки и отчеты в разы, особенно если условие не попадает в индексы.
Снижение нагрузки достигается несколькими приемами. Во-первых, типовые конфигурации поддерживают режим «производительный» RLS, где разрешенные значения материализуются в отдельные таблицы и обновляются фоново, а не вычисляются на лету. Во-вторых, шаблоны следует писать максимально просто: без вложенных запросов там, где хватает прямого сравнения с параметром. В-третьих, не стоит вешать RLS на таблицы, где ограничение не требуется бизнес-логикой, — каждый шаблон имеет цену.
Диагностировать проблему помогает технологический журнал: сравните текст и время запроса до и после включения RLS. Если основной рост времени приходится на соединение с таблицей разрешенных значений, проверьте наличие индексов по измерениям этого регистра и актуальность статистики СУБД.
Проверка результата и типичные ошибки
Проверка RLS выполняется только одним надежным способом: входом в базу под учетной записью реального пользователя с его набором ролей. Просмотр «от имени администратора» ничего не покажет, так как у администратора обычно есть полные права, отключающие ограничения.
Как проверить, что RLS работает
Видны только записи по разрешенным организациям/складам
Видны все записи или список пуст при наличии своих документов
Ошибка нарушения прав доступа
Документ открывается и доступен для изменения
Суммы учитывают только разрешенные данные
Итоги совпадают с полными данными базы
Время отклика сопоставимо с режимом без RLS
Списки открываются в разы медленнее
Ограничения механизма и альтернативы
RLS не является универсальным средством защиты. Он не ограничивает доступ на уровне отдельных реквизитов (для этого есть механизм ограничения доступа к полям через права на атрибуты), не работает с данными, выгруженными во внешние файлы, и не заменяет разграничение прав на уровне СУБД. Также RLS не действует в привилегированном режиме кода: процедуры, выполняемые с установкой привилегированного режима, видят все данные, поэтому серверный код нужно писать аккуратно.
Способы разграничения доступа в 1С
Подходит, когда достаточно запретить целые объекты: например, кладовщику закрыть зарплату. Не ограничивает записи внутри таблицы.
Стандартный способ для ограничений по организациям, складам, контрагентам. Требует корректных шаблонов и контроля производительности.
Радикальный вариант при жестком разделении юрлиц или франчайзи: полная изоляция, но сложнее консолидированная отчетность и обмены.
Выбор зависит от требований к изоляции: если нужно только скрыть чужие документы в общем списке — достаточно типового RLS. Если подразделения не должны даже теоретически получить доступ к чужим данным при любой ошибке настройки — надежнее разделить базы.
Что важно запомнить
RLS фильтрует записи на уровне платформы через шаблоны в ролях и параметры сеанса. Настройка в типовых конфигурациях ведется через профили и группы доступа, результат проверяется только входом под реальным пользователем. Контролируйте суммарные роли, производительность запросов и регламентное обновление доступа.
Часто задаваемые вопросы
Почему пользователь видит все записи, хотя RLS включен?
Чаще всего у него есть роль с полным доступом к объекту без ограничения — права суммируются, и ограничение из другой роли перестает действовать. Проверьте полный состав ролей пользователя, включая роли, добавленные через профили групп доступа, и убедитесь, что ни одна не дает неограниченный доступ к таблице.
Работает ли RLS в отчетах и консоли запросов?
Да. Ограничение применяется платформой к любому запросу к защищенной таблице независимо от источника: динамический список, отчет на СКД, консоль запросов, программная выборка. Исключение — код, выполняемый в привилегированном режиме, где проверка прав отключена намеренно.
Можно ли ограничить доступ к отдельным реквизитам, а не записям?
RLS для этого не предназначен — он фильтрует строки целиком. Для ограничения видимости отдельных полей используются права на реквизиты объектов в ролях, а в типовых конфигурациях — механизм ограничения доступа к отдельным полям через профили групп доступа, где такая возможность предусмотрена.
Что делать, если после включения RLS база стала работать медленно?
Проверьте, включен ли производительный режим ограничения доступа, и дождитесь завершения фонового обновления служебных таблиц. Затем проанализируйте запросы через технологический журнал: если узким местом является соединение с таблицей разрешенных значений, упростите шаблон и проверьте индексы. В крайнем случае пересмотрите состав объектов, на которых включено ограничение.
Нужно ли перезапускать сеанс пользователя после изменения групп доступа?
Да, это надежный способ: параметры сеанса вычисляются при входе, и часть кэша прав привязана к сеансу. Если пользователь продолжает видеть старую картину после изменения настроек, попросите его выйти и войти заново, а также убедитесь, что регламентные задания обновления доступа завершились без ошибок.
Можно ли написать свой шаблон RLS для самописного документа?
Да. В конфигураторе откройте роль, найдите ваш документ и в поле ограничения доступа для нужного вида права задайте условие на языке запросов, ссылаясь на параметры сеанса или регистры разрешенных значений. После обновления конфигурации базы данных протестируйте видимость под пользователем без полных прав и проверьте влияние на скорость списка.