Как ограничить доступ к организациям в ЗУП 2.5 и исправить ошибку нарушения прав при запуске?

Программист 1С v8.3 (Обычные формы) 1С:Зарплата и Управление Персоналом
← На главную

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

В этой статье мы подробно разберем, почему возникает этот конфликт, как правильно настроить механизм ограничения доступа на уровне записей (RLS) в ЗУП 2.5, избавиться от ошибок при старте системы, а также рассмотрим альтернативные и более безопасные методы передачи базы данных аудиторам.

Причина №1: Конфликт роли «Полные права» и механизма RLS

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

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

Решение: Первым делом откройте Конфигуратор, перейдите в меню «Администрирование» — «Пользователи», откройте карточку нужного пользователя и на вкладке «Прочие» снимите флажок с роли ПолныеПрава. Оставьте только прикладные роли, например, Пользователь, КадровикРегламентированныхДанных и РасчетчикРегламентированныхДанных.

Причина №2: Ошибка «Нарушение прав доступа» при запуске и роль «Пользователь»

Как только мы забираем у учетной записи полные права, при входе в программу от имени аудитора или ограниченного пользователя мгновенно возникает ошибка доступа, и сеанс аварийно завершается. Выясним, почему это происходит и как это исправить.

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

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

Разберем два эффективных способа решения этой проблемы.

Способ 2.1. Отключение автозапуска Панели функций

Если аудитору или ограниченному пользователю для работы не требуется интерактивный рабочий стол (панель функций), проще всего отключить его автозапуск при старте системы. Сделаем это по шагам:

  1. Авторизуйтесь в информационной базе под учетной записью с правами Администратора (у которой активна роль ПолныеПрава).
  2. Перейдите в меню «Сервис» — «Настройки пользователя».
  3. В открывшемся окне найдите в списке нужного пользователя (аудитора).
  4. Раскройте ветку настроек «Запуск программы».
  5. Найдите параметр «Открывать при запуске панель функций» и снимите с него флажок (установите значение в «Нет»).
  6. Сохраните изменения, нажав кнопку «ОК».

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

Способ 2.2. Добавление прав на Панель функций в Конфигураторе

Если панель функций пользователю жизненно необходима, нам придется скорректировать права доступа в Конфигураторе. Этот способ требует монопольного доступа к базе данных для сохранения изменений конфигурации:

  1. Откройте базу данных в режиме «Конфигуратор».
  2. В дереве метаданных найдите ветку «Общие» — «Роли».
  3. Найдите роль, назначенную вашему аудитору (например, созданную вами специализированную роль или стандартную прикладную роль).
  4. Дважды кликните по роли, чтобы открыть окно настройки прав.
  5. В дереве объектов найдите раздел «Обработки» и выберите объект ПанельФункций.
  6. На вкладке «Права» установите флажки для действий «Использование» и «Просмотр».
  7. Сохраните конфигурацию базы данных (клавиша F7).

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

Как локализовать неочевидные ошибки доступа через Журнал регистрации

Если вы выполнили описанные шаги, но система всё равно выдает «Нарушение прав доступа» при старте или при проведении документов, не нужно гадать, на какой именно объект не хватает прав. Платформа фиксирует абсолютно все отказы. Выясним точную причину с помощью Журнала регистрации:

  1. Попытайтесь зайти в программу под учетной записью ограниченного пользователя и дождитесь появления ошибки.
  2. Сразу после этого зайдите в эту же базу под учетной записью Администратора.
  3. Перейдите в меню «Сервис» — «Журнал регистрации».
  4. Нажмите кнопку «Установить фильтр» (значок воронки).
  5. На вкладке «Основные» выберите пользователя, под которым пытались зайти (аудитора).
  6. На вкладке «События» в поле «Статус транзакции» или «Событие» выберите пункт «Доступ — Отказ в доступе».
  7. Нажмите «ОК» и проанализируйте полученный список.

В колонке «Данные» или «Представление объекта» система четко укажет имя метаданных (например, конкретный регистр сведений РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций или константу), к которому программа пыталась обратиться, но получила отказ. Зная имя этого объекта, вы сможете легко добавить на него права чтения в Конфигураторе для роли вашего пользователя.

Важная тонкость RLS в ЗУП 2.5: Ограничение по физическим лицам

Даже если вы успешно ограничили доступ по организациям, в ЗУП 2.5 вас подстерегает еще один серьезный подводный камень. Структура метаданных программы такова, что кадровые и расчетные документы содержат ссылки на справочник ФизическиеЛица.

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

Чтобы избежать этой проблемы, выполните следующие действия:

  1. Перейдите в справочник «Физические лица».
  2. Настройте «Группы доступа физических лиц» (это специальный реквизит в карточке каждого физлица). Например, создайте группы «Организация 1» и «Организация 2».
  3. Распределите всех сотрудников по соответствующим группам доступа.
  4. В настройках прав групп пользователей (меню «Сервис» — «Пользователи и права доступа» — «Группы пользователей») для группы «Аудиторы» на вкладке «Физические лица» укажите доступ только к тем группам физлиц, которые привязаны к разрешенной организации.

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

Альтернативные и более надежные способы подготовки базы для аудиторов

Поскольку настройка RLS в ЗУП 2.5 является трудоемким процессом, который нагружает систему, а аудиторам зачастую требуется предоставить базу «еще вчера», рассмотрим другие варианты решения задачи.

Вариант А. Исправление структуры базы для создания РИБ

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

Выполним процедуру восстановления структуры таблиц:

  1. Обязательно создайте резервную копию (архив .dt) вашей рабочей информационной базы.
  2. Запустите базу в режиме «Конфигуратор» под правами администратора.
  3. Откройте меню «Администрирование» — «Тестирование и исправление».
  4. Установите флажки на следующих проверках:
    • Реиндексация таблиц информационных баз;
    • Проверка логической целостности конфигурации;
    • Проверка ссылочной целостности;
    • Реструктуризация таблиц информационных баз (этот пункт является ключевым для исправления структуры таблиц под текущую платформу).
  5. В блоках действий при наличии ошибок выберите параметры «Создавать объекты» или «Очищать ссылки» (в зависимости от вашей политики, но для копии базы лучше выбирать очистку битых ссылок).
  6. Нажмите кнопку «Выполнить» и дождитесь окончания процесса. На больших базах процедура может занять длительное время.

После успешного завершения тестирования все рассогласования в структуре SQL-таблиц будут устранены. Вы сможете без ошибок настроить план обмена по организациям и создать чистую периферийную базу для передачи аудиторам.

Вариант Б. Физическое удаление лишних данных из копии базы

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

Рассмотрим по шагам этот алгоритм:

  1. Создайте полную копию вашей рабочей информационной базы и разверните ее на локальном компьютере или тестовом сервере. Ни в коем случае не проводите эти операции в рабочей базе!
  2. Зайдите в созданную копию под учетной записью с полными правами.
  3. Откройте встроенную обработку «Групповая обработка справочников и документов» (меню «Сервис» — «Универсальные механизмы»).
  4. В поле «Тип объекта» выберите «Документы», отметьте все виды документов в списке.
  5. В таблице отбора добавьте условие: Организация Не Равно [РазрешеннаяДляАудитаОрганизация].
  6. Нажмите кнопку «Отобрать». Система найдет все документы, не принадлежащие разрешенной организации.
  7. В поле «Действие» выберите «Пометить на удаление» и нажмите кнопку «Выполнить».
  8. Перейдите в меню «Операции» — «Удаление помеченных объектов» и запустите процедуру монопольного удаления.
  9. Аналогичным образом поступите со справочниками (Подразделения, Сотрудники), предварительно очистив по ним движения в регистрах сведений и накопления.

Для окончательной очистки базы от «хвостов» и уменьшения размера файла базы данных запустите Конфигуратор и выполните процедуру «Тестирование и исправление» с включенной опцией реструктуризации таблиц и очистки битых ссылок. В результате вы получите чистую, легкую и абсолютно безопасную копию базы данных, содержащую сведения только по одной организации.

← На главную