1С: У пользователя недостаточно прав на исполнение операции над базой (RLS)
Архитектура RLS и причины блокировки запросов
Ошибка «У пользователя недостаточно прав на исполнение операции над базой данных» возникает на уровне ядра СУБД (транслируется сервером 1С), когда пользователь пытается прочитать, изменить или удалить записи, к которым у него нет доступа согласно настроенным шаблонам ограничения доступа на уровне записей (Record Level Security - RLS). В отличие от простого отсутствия роли, эта ошибка возникает В ПРОЦЕССЕ выполнения валидного запроса. Бизнес-риски: остановка работы пользователей (менеджер не может провести документ, так как в нем используется договор контрагента, доступ к которому запрещен RLS).
Уровни возникновения ошибки
| Операция | Причина возникновения | Уровень перехвата |
|---|---|---|
| Чтение (Выборка) | В запросе не используется ключевое слово РАЗРЕШЕННЫЕ. Запрос наткнулся на запрещенную строку. | Платформа 1С (Выполнение запроса) |
| Запись / Проведение | Изменение данных запрещено RLS для текущего подразделения/организации пользователя. | Транзакция СУБД (ПередЗаписью) |
| Фоновое задание | Задание запущено под пользователем без нужных прав или без Привилегированного режима. | Серверный модуль 1С |
Методы обхода ограничений RLS (для разработчиков)
Сценарий 1: Использование ВЫБРАТЬ РАЗРЕШЕННЫЕ
Если задача — просто показать пользователю список элементов (например, в отчете), не вызывая ошибку при натыкании на закрытые данные, модифицируйте запрос.
// Ошибка возникнет, если в Справочник.Контрагенты есть недоступные записи
ВЫБРАТЬ * ИЗ Справочник.Контрагенты
// Правильный запрос для отчетов и динамических списков
ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ Справочник.КонтрагентыСценарий 2: Привилегированный режим (Программное повышение прав)
Если бизнес-логика требует (например, при проведении накладной нужно сделать запись в регистр бухгалтерии, куда у менеджера нет прав), код нужно выполнять на сервере без проверки прав.
// В серверном модуле или модуле объекта (ПриПроведении)
УстановитьПривилегированныйРежим(Истина);
// Выполнение действий, игнорирующих RLS и Роли
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
УстановитьПривилегированныйРежим(Ложь); // Возврат прав (Обязательно!)Типовые ошибки администраторов ИБ в 1С
- Перекрестные RLS: Назначение пользователю нескольких ролей с конфликтующими шаблонами RLS. В 1С права складываются (логическое ИЛИ). Если одна роль дает доступ к Контрагенту, а другая ограничивает, доступ будет предоставлен.
- Забытый Привилегированный режим: Если не отключить
УстановитьПривилегированныйРежим(Ложь)до возврата управления клиенту (на серверных вызовах без контекста), это создаст дыру в безопасности сеанса.
Включение RLS на крупных базах деградирует производительность СУБД до 50% из-за сложных JOIN'ов в SQL-транзакциях. Эксперты ITSTM проведут аудит настроек RLS, внедрят Производительный RLS (через ключи доступа) и оптимизируют SQL-запросы.
Частые вопросы (FAQ)
Почему ВЫБРАТЬ РАЗРЕШЕННЫЕ не помогло при проведении документа?
Ключевое слово РАЗРЕШЕННЫЕ влияет только на операции ЧТЕНИЯ (выборки из БД). Оно фильтрует результат запроса, отбрасывая запрещенные строки. При ЗАПИСИ объекта платформа проверяет права доступа на конкретный объект, и здесь поможет только Привилегированный режим.
Как работают Общие модули с галочкой 'Привилегированный'?
Все экспортные процедуры и функции в таком модуле всегда выполняются с полными правами и игнорированием RLS, независимо от прав пользователя, вызвавшего метод. Это безопасный паттерн для инкапсуляции критичных операций.
Снижает ли RLS скорость работы 1С?
Да, критически. Платформа 1С динамически дописывает громоздкие условия (LEFT JOIN со служебными таблицами прав) к каждому вашему запросу. В высоконагруженных базах рекомендуется переходить на упрощенный RLS или решать бизнес-логику на уровне интерфейса.
Как узнать, какая именно запись вызвала ошибку RLS?
В типовых конфигурациях поможет Технологический журнал 1С. Настройте событие DBMSSQL (или DBPOSTGRS) и EXCP. Там будет зафиксирован полный текст SQL-запроса, на котором сработал механизм безопасности (Access Denied).