Как получить список отображаемых пользователей информационной базы 1С до прохождения авторизации?

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

При разработке внешних обработок, утилит администрирования или механизмов консолидации данных из нескольких информационных баз часто возникает задача отобразить список пользователей конкретной базы без необходимости ручного ввода логина. Разберем особенности работы платформы 1С:Предприятие 8, выясним ограничения механизмов безопасности и рассмотрим практические способы решения этой задачи.

Ограничения встроенных механизмов платформы

Проанализируем работу штатных интерфейсов подключения. В платформе 1С:Предприятие 8 предусмотрены механизмы программного доступа к списку учетных записей через объект ПользователиИнформационнойБазы. Однако для работы с ним через COM-соединение V83.COMConnector, Automation-сервер V83.Application, Web-сервисы, HTTP-сервисы или интерфейс OData требуется обязательное прохождение аутентификации, если в информационной базе зарегистрирован хотя бы один пользователь.

В отличие от устаревшей версии 1С 7.7, где сведения об учетных записях хранились в открытом системном файле, в актуальных версиях платформы получить список пользователей встроенными средствами языка 1С до аутентификации невозможно из соображений безопасности.

Штатная работа со свойством видимости пользователей из сеанса 1С

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

Разберем пример кода на встроенном языке:


МассивВидимыхПользователей = Новый Массив;
СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();

Для Каждого ТекПользователь Из СписокПользователей Цикл
    Если ТекПользователь.ПоказыватьВСпискеВыбора Тогда
        МассивВидимыхПользователей.Добавить(ТекПользователь.Имя);
    КонецЕсли;
КонецЦикла;

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

Способ 1. Использование сквозной аутентификации операционной системы

Когда цель состоит в том, чтобы избавить конечных пользователей от путаницы с логинами и паролями при сборе сводных отчетов по нескольким базам, наиболее надежным и безопасным решением является настройка аутентификации средствами операционной системы (Windows/Active Directory):

  1. Открываем список пользователей в режиме Конфигуратор или через раздел администрирования.
  2. В свойствах пользователя информационной базы устанавливаем флаг Аутентификация операционной системы.
  3. Указываем учетную запись домена или локального пользователя в формате Домен\ИмяПользователя.
  4. В коде подключения обработок используем подключение без явного указания логина и пароля — платформа выполнит прозрачный вход под текущим пользователем Windows.

Способ 2. Использование сервисного технического пользователя

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

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

Способ 3. Публикация легковесного HTTP-сервиса

Для архитектурно изолированного получения списка видимых пользователей можно опубликовать в каждой базе легковесный HTTP-сервис. Разберем по шагам логику его работы:

  1. В конфигурации создаем объект HTTP-сервис с шаблоном URL (например, /get_users).
  2. На веб-сервере настраиваем доступ к сервису под предопределенным техническим пользователем.
  3. В обработчике метода GET вызываем метод ПользователиИнформационнойБазы.ПолучитьПользователей(), формируем JSON-массив из имен пользователей с признаком ПоказыватьВСпискеВыбора = Истина и возвращаем ответ внешней системе.

Способ 4. Низкоуровневое чтение данных (для администраторов)

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

  1. Для клиент-серверного варианта (SQL): таблица учетных записей информационной базы носит имя v8users. При наличии прав прямого чтения к СУБД можно выполнить SQL-запрос к полям Name (логин), Descr (полное имя) и Show (флаг показа в списке).
  2. Для файлового варианта (.1CD): данные учетных записей содержатся во внутренней таблице V8USERS файла базы данных, которая может быть прочитана специализированными утилитами анализа формата без запуска среды 1С.
← На главную