Почему появляется ошибка «Недостаточно прав для операций над базой данных» при формировании внешнего отчета и как ее исправить

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

При разработке внешних отчетов и обработок разработчики 1С часто сталкиваются с ситуацией, когда под полными правами (администратором) отчет формируется корректно, однако при запуске от имени обычного пользователя с ограниченными правами возникает ошибка «Недостаточно прав для операций над базой данных». Назначение прав на чтение конкретных регистров и справочников в ролях пользователя не всегда решает проблему. Проанализируем причины этой ошибки и разберем варианты ее устранения.

Причина ошибки: работа механизма RLS

Основная причина заключается в работе механизма RLS (Record Level Security) — ограничения прав доступа на уровне отдельных записей базы данных. Если в программе включено ограничение прав по группам доступа (например, по организациям, подразделениям, контрагентам или группам номенклатуры), платформа проверяет права пользователя на каждый объект, попадающий в выборку запроса.

Если у пользователя есть доступ к регистру накопления, но нет доступа к конкретной аналитике или объекту-регистратору, попадающему в результат запроса, платформа блокирует выполнение всей операции и выдает ошибку прав.

Основное решение: использование ключевого слова РАЗРЕШЕННЫЕ

Для того чтобы запрос игнорировал записи, на которые у текущего пользователя нет прав RLS, и возвращал только доступные данные, необходимо в тексте запроса указать ключевое слово РАЗРЕШЕННЫЕ сразу после инструкции ВЫБРАТЬ.

Рассмотрим пример обычного запроса, вызывающего ошибку RLS:


ВЫБРАТЬ
	ДвиженияДенежныеСредства.Период КАК Период,
	ДвиженияДенежныеСредства.Регистратор КАК Регистратор,
	ДвиженияДенежныеСредства.Сумма КАК Сумма
ИЗ
	РегистрНакопления.ДвиженияДенежныеСредстваКонтрагент КАК ДвиженияДенежныеСредства

Чтобы отчет успешно формировался у пользователей с ограниченными правами, изменим текст запроса, добавив РАЗРЕШЕННЫЕ:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ДвиженияДенежныеСредства.Период КАК Период,
	ДвиженияДенежныеСредства.Регистратор КАК Регистратор,
	ДвиженияДенежныеСредства.Сумма КАК Сумма
ИЗ
	РегистрНакопления.ДвиженияДенежныеСредстваКонтрагент КАК ДвиженияДенежныеСредства

Дополнительные особенности и тонкости настройки прав

В некоторых случаях добавления одного ключевого слова РАЗРЕШЕННЫЕ в заголовок запроса может оказаться недостаточно. Разберем по шагам сопутствующие причины возникновения ошибок прав и способы их решения.

  1. Указание РАЗРЕШЕННЫЕ во вложенных запросах и виртуальных таблицах:

    Если запрос содержит подзапросы, объединения (ОБЪЕДИНИТЬ ВСЕ) или обращения к виртуальным таблицам, необходимо указывать ключевое слово РАЗРЕШЕННЫЕ внутри каждой секции ВЫБРАТЬ каждого вложенного запроса. В противном случае RLS заблокирует выборку на уровне подзапроса.

  2. Работа с составными типами данных:

    Если в запросе происходит обращение через точку к реквизиту составного типа (например, Источник.Регистратор.Подразделение), платформа проверяет права доступа на все возможные типы объектов, которые могут быть регистратором. Если у пользователя нет прав хотя бы на один документ из составного типа, возникает ошибка. Для решения следует явно ограничивать тип с помощью функции ВЫРАЗИТЬ():

    
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
    	ВЫРАЗИТЬ(Таблица.Регистратор КАК Документ.РеализацияТоваровУслуг).Подразделение КАК Подразделение
    ИЗ
    	РегистрНакопления.ДвиженияДенежныеСредстваКонтрагент КАК Таблица
    
  3. Безопасный режим Библиотеки Стандартных Подсистем (БСП):

    Внешние отчеты, подключаемые через механизм «Дополнительные отчеты и обработки», по умолчанию исполняются в безопасном режиме. В этом режиме программный вызов метода УстановитьПривилегированныйРежим(Истина) блокируется платформой. Если отчет должен формироваться без учета RLS (например, сводный отчет для руководства), при регистрации внешнего отчета в справочнике необходимо отключить безопасный режим или разрешить полный доступ.

  4. Автозаполнение в Системе компоновки данных (СКД):

    Флаг «Автозаполнение» в наборе данных СКД автоматически подтягивает в запрос все связи и реквизиты объектов. Если СКД неявно запрашивает поля, к которым у пользователя нет прав RLS, отчет может выдать ошибку. В таких ситуациях рекомендуется отключать автозаполнение и настраивать доступные поля и связи вручную.

  5. Проверка прав «Чтение» и «Просмотр»:

    Разграничивайте права на уровне метаданных. Право «Чтение» необходимо для извлечения данных из базы (на него накладывается RLS), а право «Просмотр» требуется интерфейсу и СКД для отображения представлений объектов. Убедитесь, что в профиле групп доступа пользователю назначены оба эти права на все используемые в отчете справочники и документы.

← На главную