При разработке внешних обработок, утилит администрирования или механизмов консолидации данных из нескольких информационных баз часто возникает задача отобразить список пользователей конкретной базы без необходимости ручного ввода логина. Разберем особенности работы платформы 1С:Предприятие 8, выясним ограничения механизмов безопасности и рассмотрим практические способы решения этой задачи.
Проанализируем работу штатных интерфейсов подключения. В платформе 1С:Предприятие 8 предусмотрены механизмы программного доступа к списку учетных записей через объект ПользователиИнформационнойБазы. Однако для работы с ним через COM-соединение V83.COMConnector, Automation-сервер V83.Application, Web-сервисы, HTTP-сервисы или интерфейс OData требуется обязательное прохождение аутентификации, если в информационной базе зарегистрирован хотя бы один пользователь.
В отличие от устаревшей версии 1С 7.7, где сведения об учетных записях хранились в открытом системном файле, в актуальных версиях платформы получить список пользователей встроенными средствами языка 1С до аутентификации невозможно из соображений безопасности.
Если сеанс уже запущен или авторизация выполнена программно под учетной записью с административными правами, мы можем легко отобрать только тех пользователей, которые включены для показа в окне запуска программы. Рассмотрим, как программно отфильтровать пользователей по свойству ПоказыватьВСпискеВыбора.
Разберем пример кода на встроенном языке:
МассивВидимыхПользователей = Новый Массив;
СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекПользователь Из СписокПользователей Цикл
Если ТекПользователь.ПоказыватьВСпискеВыбора Тогда
МассивВидимыхПользователей.Добавить(ТекПользователь.Имя);
КонецЕсли;
КонецЦикла;
Свойство ПоказыватьВСпискеВыбора имеет тип Булево и управляет отображением конкретной учетной записи в стандартном диалоге запуска информационной базы.
Когда цель состоит в том, чтобы избавить конечных пользователей от путаницы с логинами и паролями при сборе сводных отчетов по нескольким базам, наиболее надежным и безопасным решением является настройка аутентификации средствами операционной системы (Windows/Active Directory):
Домен\ИмяПользователя.Если необходимо выполнять программные регламентные выгрузки или обращаться к базе внешними скриптами, настраивают единую служебную учетную запись:
ТехническийПользователь).ПоказыватьВСпискеВыбора, чтобы учетная запись не отображалась в окне запуска обычных пользователей.Для архитектурно изолированного получения списка видимых пользователей можно опубликовать в каждой базе легковесный HTTP-сервис. Разберем по шагам логику его работы:
/get_users).ПользователиИнформационнойБазы.ПолучитьПользователей(), формируем JSON-массив из имен пользователей с признаком ПоказыватьВСпискеВыбора = Истина и возвращаем ответ внешней системе.В исключительных случаях, когда прямое подключение к платформе невозможно, доступ к списку пользователей можно получить на уровне хранилища данных:
v8users. При наличии прав прямого чтения к СУБД можно выполнить SQL-запрос к полям Name (логин), Descr (полное имя) и Show (флаг показа в списке).V8USERS файла базы данных, которая может быть прочитана специализированными утилитами анализа формата без запуска среды 1С.