Механизм 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 (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С:Предприятие, выберите нужную базу и в меню запуска удерживайте клавишу
Shift, затем выберите "Конфигуратор".В меню конфигуратора перейдите в
Администрирование → Пользователи.Выберите пользователя, для которого нужно отключить RLS, и нажмите "Изменить".
В открывшемся окне перейдите на вкладку Прочие (или Дополнительно, в зависимости от версии).
Найдите опцию Использовать ограничения доступа на уровне записей (RLS) и снимите с неё галочку.
Сохраните изменения и закройте окно редактирования пользователя.
Обновите данные конфигурации:
Конфигурация → Обновить конфигурацию базы данных(если требуется).
Создать резервную копию базы данных|Проверить права доступа к конфигуратору|Убедиться, что нет активных пользователей в базе|Запустить конфигуратор от имени администратора|Подготовить список пользователей для изменений-->
После выполнения этих действий выбранный пользователь будет видеть все записи в базе без ограничений RLS. Обратите внимание, что в некоторых конфигурациях (например, 1С:ERP) опция RLS может быть скрыта в других разделах меню. В этом случае используйте поиск по настройкам конфигуратора (Ctrl+F).
Если вам нужно отключить RLS для всех пользователей одновременно, можно воспользоваться групповым редактированием. Для этого:
В списке пользователей выделите нужные учетные записи (можно использовать
Ctrl+Aдля выделения всех).Нажмите правой кнопкой мыши и выберите Изменить выделенные.
В открывшемся окне найдите параметр RLS и отключите его для всех выбранных пользователей.
Если после отключения RLS некоторые отчеты или обработки работают медленнее, это может быть связано с тем, что ранее RLS оптимизировал запросы к базе. В этом случае проверьте индексы таблиц или используйте временное отключение только для конкретных операций.
Отключение RLS через изменение ролей пользователей
Альтернативный способ отключить RLS — модификация ролей пользователей. Этот метод более гибкий, так как позволяет точечно управлять доступом, не затрагивая глобальные настройки. Однако он требует понимания структуры ролей в вашей конфигурации.
Инструкция по изменению ролей:
Откройте конфигуратор и перейдите в
Администрирование → Роли.Выберите роль, которую нужно изменить (например,
Полные праваили кастомную роль для администраторов).Нажмите "Изменить" и перейдите на вкладку Права.
Найдите раздел Ограничения доступа на уровне записей (RLS).
Отключите галочки напротив объектов метаданных, для которых нужно убрать ограничения (например,
Документы.РеализацияТоваровУслуг).Сохраните изменения и обновите конфигурацию базы данных.
Если вы хотите создать отдельную роль без RLS для временного использования:
- 📝 Создайте новую роль через
Конфигурация → Роли → Добавить. - 🔓 Назовите её, например,
БезRLS_Временная. - 🛠️ Скопируйте права из существующей роли (например,
Полные права), но отключите все настройки RLS. - 👤 Назначьте эту роль нужным пользователям в их профилях.
Этот метод удобен, если нужно отключить RLS только для части функционала (например, для отчетов, но не для документов). Однако помните, что изменение стандартных ролей (например, Полные права) может привести к проблемам при обновлении конфигурации.
Что делать, если роль "Полные права" не отключает RLS?
В некоторых конфигурациях (например, 1С:ERP или 1С:Управление холдингом) роль "Полные права" может не давать полного доступа из-за встроенных механизмов безопасности. В этом случае:
1. Проверьте настройки параметров сеанса (Администрирование → Параметры сеанса).
2. Убедитесь, что в конфигурации не используется дополнительный модуль контроля доступа (например, ПодсистемаБезопасности).
3. Попробуйте создать новую роль с явным отключением всех RLS-ограничений для нужных объектов.
Программное отключение RLS: для разработчиков
Если вам нужно временно отключить RLS на время выполнения конкретного кода (например, при загрузке данных или формировании отчета), можно использовать программные методы. Этот способ требует знаний 1С:Предприятие 8.3 и права на изменение конфигурации.
Основные подходы:
Использование параметра сеанса:
ПараметрыСеанса = Новый Структура();ПараметрыСеанса.Вставить("ИгнорироватьОграниченияRLS", Истина);
УстановитьПараметрыСеанса(ПараметрыСеанса);
Этот код отключает RLS для текущего сеанса. Действует до завершения сеанса или до явного сброса параметров.
Модификация запросов:
Если RLS мешает конкретному запросу, можно добавить в него условие, игнорирующее ограничения:
Запрос = Новый Запрос;Запрос.Текст =
"ВЫБРАТЬ
| Документ.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Документ
|ГДЕ
| НЕ Документ.ЭтоГруппа
|
|// Отключаем RLS для этого запроса
|УСТАНОВИТЬ ОГРАНИЧЕНИЯ RLS ВЫКЛ";
Обратите внимание, что этот синтаксис работает не во всех версиях платформы.
Использование привилегированного режима:
НачатьТранзакцию();Попытка
УстановитьПривилегированныйРежим(Истина);
// Ваш код без 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С или средства СУБД.
Документируйте все изменения: фиксируйте, какие настройки RLS были отключены и для каких пользователей.
Используйте временные роли: вместо глобального отключения RLS создавайте временные роли с расширенными правами.
Проверяйте данные после изменений: запускайте тестовые отчеты и сверяйте критические показатели.
Ограничивайте время действия: отключайте RLS только на необходимый период и сразу возвращайте настройки обратно.
Если после отключения RLS вы обнаружили проблемы в работе системы, проверьте:
- 🔍 Журнал регистрации (
Администрирование → Журнал регистрации) на наличие ошибок. - 📊 Тестовые отчеты: сравните данные до и после отключения RLS.
- 🔧 Целостность базы: используйте
Тестирование и исправлениев конфигураторе.
В некоторых случаях после отключения RLS может потребоваться перезагрузка сервера 1С:Предприятия или даже перезапуск СУБД, чтобы изменения вступили в силу.
FAQ: Частые вопросы по отключению RLS в 1С
Можно ли отключить RLS только для одного отчета?
Да, это возможно двумя способами:
- Изменить код отчета, добавив в запрос конструкцию
УСТАНОВИТЬ ОГРАНИЧЕНИЯ RLS ВЫКЛ(работает не во всех версиях платформы). - Создать отдельную роль без RLS и временно назначить её пользователю на время формирования отчета.
Второй способ более универсален и не требует изменения конфигурации.
Почему после отключения RLS некоторые документы не видны?
Это может происходить по нескольким причинам:
- Документы помечены на удаление и скрыты фильтром (не связано с RLS).
- В конфигурации используются дополнительные механизмы фильтрации (например, по дате или статусу).
- RLS отключен не для всех объектов метаданных (проверьте настройки ролей).
- Данные физически отсутствуют в базе (возможно, они были удалены ранее).
Проверьте видимость документов в режиме "Все функции" или через прямой запрос к базе.
Как отключить RLS в 1С:ЗУП для просмотра зарплат всех сотрудников?
В 1С:Зарплата и Управление Персоналом 3.1 RLS настроен на уровне документов НачислениеЗарплаты и ВедомостьВыплатыЗарплаты. Чтобы увидеть все данные:
- Откройте конфигуратор и перейдите в
Администрирование → Роли. - Найдите роль, назначенную вашему пользователю (например,
ЗарплатаРасчетчик). - На вкладке Права отключите RLS для объектов
Документ.НачислениеЗарплатыиДокумент.ВедомостьВыплатыЗарплаты. - Обновите конфигурацию базы данных.
Обратите внимание, что в 1С:ЗУП также действуют ограничения по подразделениям. Их нужно отключать отдельно в настройках пользователя.
Можно ли отключить RLS в облачной версии 1С:Fresh?
В 1С:Fresh возможности по отключению RLS сильно ограничены из-за политики безопасности облачной платформы. Варианты действий:
- Обратиться в техническую поддержку с обоснованием необходимости отключения RLS (например, для аудита).
- Использовать временные роли с расширенными правами (если это разрешено тарифом).
- Экспортировать данные в файл и работать с ними локально (например, через 1С:Предприятие в файловом варианте).
Самостоятельное отключение RLS на уровне СУБД в облаке невозможно.
Как проверить, отключен ли RLS для пользователя?
Есть несколько способов проверки:
- Запустите 1С от имени пользователя и попробуйте открыть документы, которые ранее были недоступны.
- В конфигураторе проверьте настройки пользователя на вкладке Прочие (должна быть снята галочка Использовать ограничения доступа на уровне записей).
- Выполните тестовый запрос с отключенным RLS и сравните количество строк с обычным режимом:
Запрос1 = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК КолВо ИЗ Документ.РеализацияТоваровУслуг");
Запрос2 = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК КолВо ИЗ Документ.РеализацияТоваровУслуг УСТАНОВИТЬ ОГРАНИЧЕНИЯ RLS ВЫКЛ");
Результат1 = Запрос1.Выполнить().Выгрузить();
Результат2 = Запрос2.Выполнить().Выгрузить();
Если Результат1.КолВо <> Результат2.КолВо Тогда
Сообщить("RLS активен! Разница: " + (Результат2.КолВо - Результат1.КолВо));
КонецЕсли;