Механизм RLS (Record Level Security) в 1С:Предприятие 8.3 — это мощный инструмент разграничения доступа к данным на уровне записей. Он позволяет настраивать видимость информации для разных пользователей в зависимости от их ролей, подразделений или других критериев. Однако бывают ситуации, когда RLS становится помехой: при отладке конфигурации, миграции данных или когда требуется временный полный доступ к базе.

Отключение RLS — не всегда тривиальная задача. В зависимости от версии платформы, конфигурации (УТ 11, БП 3.0, ЗУП 3.1 и др.) и способа развертывания (файловый или клиент-серверный вариант) процесс может иметь нюансы. В этой статье мы разберем все возможные сценарии отключения RLS, включая ручные методы через конфигуратор, программные обходы ограничений и анализ последствий для безопасности системы.

Важно понимать, что отключение RLS — это не просто техническая операция, а изменение модели безопасности. В клиент-серверном варианте работы 1С отключение RLS на уровне СУБД (например, Microsoft SQL Server или PostgreSQL) может привести к неконсистентности данных, если не синхронизировать изменения с конфигурацией. Поэтому перед началом работ рекомендуем создать резервную копию базы и согласовать действия с администратором системы.

📊 С какой целью вы отключаете RLS в 1С?
Для отладки конфигурации
Для миграции данных
Из-за ошибок в работе
По требованию аудита
Другое

Что такое RLS в 1С и почему его иногда нужно отключать

RLS (Record Level Security) — это механизм ограничения доступа к данным на уровне отдельных записей в базе. В отличие от традиционных ролей, которые регулируют доступ к объектам метаданных (справочникам, документам, отчетам), RLS работает на уровне конкретных строк в таблицах базы данных. Например, менеджер отдела продаж будет видеть только те документы РеализацияТоваровУслуг, которые относятся к его подразделению.

Основные причины для отключения RLS:

  • 🔧 Отладка и тестирование: при поиске ошибок в конфигурации RLS может скрывать данные, необходимые для анализа.
  • 📊 Миграция данных: при переносе информации между базами RLS может блокировать доступ к записям, которые нужно перенести.
  • 🐞 Ошибки в логике RLS: если правила настроены некорректно, пользователи могут не видеть нужные данные или, наоборот, получать доступ к чужой информации.
  • 🔍 Аудит и проверки: иногда требуется предоставить временный полный доступ к данным для внешних проверок.

Однако отключение RLS — это всегда компромисс между удобством и безопасностью. Без этого механизма пользователи могут получить доступ к конфиденциальной информации, что нарушает политику безопасности компании. Поэтому перед отключением необходимо оценить риски и согласовать действия с ответственными лицами.

⚠️ Внимание: В некоторых отраслевых решениях (например, 1С:ERP или 1С:Управление холдингом) RLS интегрирован в бизнес-логику. Его отключение может привести к ошибкам в работе системы, особенно если конфигурация использует RLS для контроля межфирменных операций или консолидации данных.

Способы отключения RLS в 1С: обзор методов

Существует несколько способов отключить RLS в 1С:Предприятие 8.3. Выбор метода зависит от задачи, версии платформы и типа базы данных. Рассмотрим основные подходы:

Метод отключения Применимость Сложность Обратимость Риски
Отключение через конфигуратор (управляемые формы) Любые конфигурации на управляемых формах Низкая Да Минимальные, если не сохранять изменения
Изменение ролей пользователей Все конфигурации Средняя Да Возможны ошибки при некорректной настройке
Программное отключение (через код) Для опытных разработчиков Высокая Да Ошибки в коде могут нарушить работу системы
Отключение на уровне СУБД (SQL-запросы) Клиент-серверный вариант с MS SQL/PostgreSQL Очень высокая Частично Высокий риск нарушения целостности данных
Использование режима "Все функции" Файловый вариант или тонкий клиент Низкая Да Ограниченная функциональность

Наиболее безопасным и рекомендуемым способом является отключение RLS через конфигуратор. Этот метод не требует изменений в базе данных и легко обратим. Программное отключение и работа на уровне СУБД должны использоваться только в крайних случаях и только опытными специалистами.

⚠️ Внимание: Если вы работаете с облачной версией 1С:Fresh, возможности по отключению RLS сильно ограничены. В большинстве случаев это можно сделать только через обращение в техническую поддержку с обоснованием необходимости.

Отключение RLS через конфигуратор: пошаговая инструкция

Самый универсальный способ отключить RLS — использовать конфигуратор 1С:Предприятия. Этот метод работает для большинства типовых конфигураций (УТ 11, БП 3.0, ЗУП 3.1 и др.) и не требует глубоких знаний программирования. Следуйте инструкции:

  1. Откройте базу в режиме Конфигуратор. Для этого запустите 1С:Предприятие, выберите нужную базу и в меню запуска удерживайте клавишу Shift, затем выберите "Конфигуратор".

  2. В меню конфигуратора перейдите в Администрирование → Пользователи.

  3. Выберите пользователя, для которого нужно отключить RLS, и нажмите "Изменить".

  4. В открывшемся окне перейдите на вкладку Прочие (или Дополнительно, в зависимости от версии).

  5. Найдите опцию Использовать ограничения доступа на уровне записей (RLS) и снимите с неё галочку.

  6. Сохраните изменения и закройте окно редактирования пользователя.

  7. Обновите данные конфигурации: Конфигурация → Обновить конфигурацию базы данных (если требуется).

Создать резервную копию базы данных|Проверить права доступа к конфигуратору|Убедиться, что нет активных пользователей в базе|Запустить конфигуратор от имени администратора|Подготовить список пользователей для изменений-->

После выполнения этих действий выбранный пользователь будет видеть все записи в базе без ограничений RLS. Обратите внимание, что в некоторых конфигурациях (например, 1С:ERP) опция RLS может быть скрыта в других разделах меню. В этом случае используйте поиск по настройкам конфигуратора (Ctrl+F).

Если вам нужно отключить RLS для всех пользователей одновременно, можно воспользоваться групповым редактированием. Для этого:

  1. В списке пользователей выделите нужные учетные записи (можно использовать Ctrl+A для выделения всех).

  2. Нажмите правой кнопкой мыши и выберите Изменить выделенные.

  3. В открывшемся окне найдите параметр RLS и отключите его для всех выбранных пользователей.

💡

Если после отключения RLS некоторые отчеты или обработки работают медленнее, это может быть связано с тем, что ранее RLS оптимизировал запросы к базе. В этом случае проверьте индексы таблиц или используйте временное отключение только для конкретных операций.

Отключение RLS через изменение ролей пользователей

Альтернативный способ отключить RLS — модификация ролей пользователей. Этот метод более гибкий, так как позволяет точечно управлять доступом, не затрагивая глобальные настройки. Однако он требует понимания структуры ролей в вашей конфигурации.

Инструкция по изменению ролей:

  1. Откройте конфигуратор и перейдите в Администрирование → Роли.

  2. Выберите роль, которую нужно изменить (например, Полные права или кастомную роль для администраторов).

  3. Нажмите "Изменить" и перейдите на вкладку Права.

  4. Найдите раздел Ограничения доступа на уровне записей (RLS).

  5. Отключите галочки напротив объектов метаданных, для которых нужно убрать ограничения (например, Документы.РеализацияТоваровУслуг).

  6. Сохраните изменения и обновите конфигурацию базы данных.

Если вы хотите создать отдельную роль без RLS для временного использования:

  • 📝 Создайте новую роль через Конфигурация → Роли → Добавить.
  • 🔓 Назовите её, например, БезRLS_Временная.
  • 🛠️ Скопируйте права из существующей роли (например, Полные права), но отключите все настройки RLS.
  • 👤 Назначьте эту роль нужным пользователям в их профилях.

Этот метод удобен, если нужно отключить RLS только для части функционала (например, для отчетов, но не для документов). Однако помните, что изменение стандартных ролей (например, Полные права) может привести к проблемам при обновлении конфигурации.

Что делать, если роль "Полные права" не отключает RLS?

В некоторых конфигурациях (например, 1С:ERP или 1С:Управление холдингом) роль "Полные права" может не давать полного доступа из-за встроенных механизмов безопасности. В этом случае:

1. Проверьте настройки параметров сеанса (Администрирование → Параметры сеанса).

2. Убедитесь, что в конфигурации не используется дополнительный модуль контроля доступа (например, ПодсистемаБезопасности).

3. Попробуйте создать новую роль с явным отключением всех RLS-ограничений для нужных объектов.

Программное отключение RLS: для разработчиков

Если вам нужно временно отключить RLS на время выполнения конкретного кода (например, при загрузке данных или формировании отчета), можно использовать программные методы. Этот способ требует знаний 1С:Предприятие 8.3 и права на изменение конфигурации.

Основные подходы:

  1. Использование параметра сеанса:

    ПараметрыСеанса = Новый Структура();
    

    ПараметрыСеанса.Вставить("ИгнорироватьОграниченияRLS", Истина);

    УстановитьПараметрыСеанса(ПараметрыСеанса);

    Этот код отключает RLS для текущего сеанса. Действует до завершения сеанса или до явного сброса параметров.

  2. Модификация запросов:

    Если RLS мешает конкретному запросу, можно добавить в него условие, игнорирующее ограничения:

    Запрос = Новый Запрос;
    

    Запрос.Текст =

    "ВЫБРАТЬ

    | Документ.Ссылка КАК Ссылка

    |ИЗ

    | Документ.РеализацияТоваровУслуг КАК Документ

    |ГДЕ

    | НЕ Документ.ЭтоГруппа

    |

    |// Отключаем RLS для этого запроса

    |УСТАНОВИТЬ ОГРАНИЧЕНИЯ RLS ВЫКЛ";

    Обратите внимание, что этот синтаксис работает не во всех версиях платформы.

  3. Использование привилегированного режима:

    НачатьТранзакцию();
    

    Попытка

    УстановитьПривилегированныйРежим(Истина);

    // Ваш код без RLS

    ЗафиксироватьТранзакцию();

    Исключение

    ОтменитьТранзакцию();

    Сообщить(ОписаниеОшибки());

    КонецПопытки;

    Этот метод требует прав администратора и должен использоваться с осторожностью.

Программное отключение RLS удобно для автоматизированных операций, но имеет ограничения:

  • 🔒 Требует прав на изменение конфигурации.
  • 🔄 Действует только в рамках текущего сеанса или транзакции.
  • 🐞 Может привести к ошибкам, если RLS интегрирован в бизнес-логику (например, в 1С:ERP).
⚠️ Внимание: В облачных решениях (1С:Fresh) программное отключение RLS через код может быть заблокировано политиками безопасности. Перед использованием проверьте возможность выполнения таких операций в вашей версии.

Отключение RLS на уровне СУБД: риски и особенности

Самый радикальный способ отключить RLS — это вмешательство на уровне СУБД (Microsoft SQL Server, PostgreSQL, IBM DB2). Этот метод используется в крайних случаях, когда другие способы не работают, и требует глубоких знаний администрирования баз данных.

Основные подходы:

  • 🗃️ Отключение триггеров RLS: в СУБД можно временно отключить триггеры, которые реализуют логику RLS.
  • 🔧 Изменение хранимых процедур: некоторые конфигурации используют хранимые процедуры для применения RLS.
  • 📝 Прямое редактирование системных таблиц: в таблицах v8users, v8roles и других хранятся настройки RLS.

Пример SQL-запроса для отключения RLS в Microsoft SQL Server:

-- Отключаем триггеры RLS для таблицы DocumentXXX (пример)

DISABLE TRIGGER [dbo].[tgr_RLS_DocumentXXX] ON [dbo].[DocumentXXX];

-- Включаем триггеры обратно после завершения работ

ENABLE TRIGGER [dbo].[tgr_RLS_DocumentXXX] ON [dbo].[DocumentXXX];

Для PostgreSQL процесс будет аналогичным, но с учетом синтаксиса этой СУБД:

-- Отключаем правило RLS

ALTER TABLE documentxxx DISABLE ROW LEVEL SECURITY;

Этот метод имеет серьезные риски:

  • 💥 Нарушение целостности данных: если RLS используется для контроля межфирменных операций, его отключение может привести к некорректным записям.
  • 🔄 Проблемы с синхронизацией: после включения RLS обратно данные могут оказаться в неконсистентном состоянии.
  • 🔒 Нарушение лицензионных соглашений: некоторые отраслевые решения запрещают прямое вмешательство в СУБД.
💡

Отключение RLS на уровне СУБД должно использоваться только в крайних случаях и только опытными администраторами. Всегда создавайте резервную копию базы перед такими операциями и документируйте все изменения.

Последствия отключения RLS и как их избежать

Отключение RLS может привести к ряду проблем, если не учесть последствия. Основные риски:

  • 🔓 Несанкционированный доступ: пользователи увидят данные, к которым не должны иметь доступа (например, зарплаты других сотрудников в 1С:ЗУП).
  • 📉 Нарушение отчетности: если RLS используется для фильтрации данных в регламентированных отчетах, их результаты могут стать некорректными.
  • 🔄 Проблемы с обновлением: некоторые обновления конфигураций проверяют целостность RLS-настроек.
  • 🛠️ Сложности с восстановлением: если RLS был отключен на уровне СУБД, его повторное включение может потребовать ручной настройки.

Чтобы минимизировать риски, следуйте этим рекомендациям:

  1. Создайте резервную копию базы перед любыми изменениями. Используйте инструменты или средства СУБД.

  2. Документируйте все изменения: фиксируйте, какие настройки RLS были отключены и для каких пользователей.

  3. Используйте временные роли: вместо глобального отключения RLS создавайте временные роли с расширенными правами.

  4. Проверяйте данные после изменений: запускайте тестовые отчеты и сверяйте критические показатели.

  5. Ограничивайте время действия: отключайте RLS только на необходимый период и сразу возвращайте настройки обратно.

Если после отключения RLS вы обнаружили проблемы в работе системы, проверьте:

  • 🔍 Журнал регистрации (Администрирование → Журнал регистрации) на наличие ошибок.
  • 📊 Тестовые отчеты: сравните данные до и после отключения RLS.
  • 🔧 Целостность базы: используйте Тестирование и исправление в конфигураторе.

В некоторых случаях после отключения RLS может потребоваться перезагрузка сервера 1С:Предприятия или даже перезапуск СУБД, чтобы изменения вступили в силу.

FAQ: Частые вопросы по отключению RLS в 1С

Можно ли отключить RLS только для одного отчета?

Да, это возможно двумя способами:

  1. Изменить код отчета, добавив в запрос конструкцию УСТАНОВИТЬ ОГРАНИЧЕНИЯ RLS ВЫКЛ (работает не во всех версиях платформы).
  2. Создать отдельную роль без RLS и временно назначить её пользователю на время формирования отчета.

Второй способ более универсален и не требует изменения конфигурации.

Почему после отключения RLS некоторые документы не видны?

Это может происходить по нескольким причинам:

  • Документы помечены на удаление и скрыты фильтром (не связано с RLS).
  • В конфигурации используются дополнительные механизмы фильтрации (например, по дате или статусу).
  • RLS отключен не для всех объектов метаданных (проверьте настройки ролей).
  • Данные физически отсутствуют в базе (возможно, они были удалены ранее).

Проверьте видимость документов в режиме "Все функции" или через прямой запрос к базе.

Как отключить RLS в 1С:ЗУП для просмотра зарплат всех сотрудников?

В 1С:Зарплата и Управление Персоналом 3.1 RLS настроен на уровне документов НачислениеЗарплаты и ВедомостьВыплатыЗарплаты. Чтобы увидеть все данные:

  1. Откройте конфигуратор и перейдите в Администрирование → Роли.
  2. Найдите роль, назначенную вашему пользователю (например, ЗарплатаРасчетчик).
  3. На вкладке Права отключите RLS для объектов Документ.НачислениеЗарплаты и Документ.ВедомостьВыплатыЗарплаты.
  4. Обновите конфигурацию базы данных.

Обратите внимание, что в 1С:ЗУП также действуют ограничения по подразделениям. Их нужно отключать отдельно в настройках пользователя.

Можно ли отключить RLS в облачной версии 1С:Fresh?

В 1С:Fresh возможности по отключению RLS сильно ограничены из-за политики безопасности облачной платформы. Варианты действий:

  • Обратиться в техническую поддержку с обоснованием необходимости отключения RLS (например, для аудита).
  • Использовать временные роли с расширенными правами (если это разрешено тарифом).
  • Экспортировать данные в файл и работать с ними локально (например, через 1С:Предприятие в файловом варианте).

Самостоятельное отключение RLS на уровне СУБД в облаке невозможно.

Как проверить, отключен ли RLS для пользователя?

Есть несколько способов проверки:

  1. Запустите 1С от имени пользователя и попробуйте открыть документы, которые ранее были недоступны.
  2. В конфигураторе проверьте настройки пользователя на вкладке Прочие (должна быть снята галочка Использовать ограничения доступа на уровне записей).
  3. Выполните тестовый запрос с отключенным RLS и сравните количество строк с обычным режимом:
Запрос1 = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК КолВо ИЗ Документ.РеализацияТоваровУслуг");

Запрос2 = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК КолВо ИЗ Документ.РеализацияТоваровУслуг УСТАНОВИТЬ ОГРАНИЧЕНИЯ RLS ВЫКЛ");

Результат1 = Запрос1.Выполнить().Выгрузить();

Результат2 = Запрос2.Выполнить().Выгрузить();

Если Результат1.КолВо <> Результат2.КолВо Тогда

Сообщить("RLS активен! Разница: " + (Результат2.КолВо - Результат1.КолВо));

КонецЕсли;