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