Как ограничить список выбора пользователей при входе в 1С и затребовать пароль для текущей учетной записи Windows?

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

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

  1. Аутентификация 1С:Предприятия — выводится диалог со списком всех зарегистрированных пользователей. В этом случае любой сотрудник за разблокированным ПК может выбрать чужую учетную запись.
  2. Аутентификация операционной системы — платформа автоматически выполняет вход в базу без показа диалога авторизации и без запроса пароля, что создает риски безопасности, если сотрудник отошел от рабочего места.

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

Вариант 1. Запуск через командный файл с ключом /N

Рассмотрим способ, не требующий внесения изменений в конфигурацию. Платформа 1С:Предприятие поддерживает параметры командной строки при запуске клиентского приложения. Параметр /N задает имя пользователя, а параметр /P — пароль.

Если передать платформе параметр /N с именем пользователя, но не указывать /P, 1С откроет окно авторизации с уже зафиксированным и подставленным логином, затребовав только ввод пароля.

Для автоматической подстановки логина текущей сессии Windows разберем пример командного файла (BAT/CMD), который берет значение из системной переменной среды %USERNAME%:


start "" "C:\Program Files\1cv8\8.3.23.1688\bin\1cv8c.exe" ENTERPRISE /F "C:\Bases\MyBase" /N "%USERNAME%"

Разберем по шагам, как работает этот метод:

  1. Переменная %USERNAME% возвращает логин пользователя, вошедшего в Windows.
  2. Платформа запускается с зафиксированным именем. Диалоговое окно 1С не позволяет выбрать другого пользователя из списка, а ожидает ввода пароля.
  3. Для удобства пользователей ярлыки запуска на рабочих столах заменяются на вызов данного скрипта.

Вариант 2. Скрытие пользователей из списка выбора

Посмотрим на штатную настройку прав доступа и учётных записей. Для предотвращения входа под чужими учетными записями «в один клик» можно полностью отключить вывод пользователей в диалоге входа.

В режиме «Конфигуратор» или через программный интерфейс управления пользователями у каждой учетной записи устанавливается свойство ПоказыватьВСпискеВыбора = Ложь. В этом случае при запуске 1С список выбора становится пустым, а поле ввода логина — незаполненным. Пользователю придется вводить свой логин вручную, что исключает возможность случайного выбора чужого имени.

Вариант 3. Двухэтапная авторизация (Windows-вход + проверка пароля 1С)

Проанализируем программный способ, позволяющий сочесть удобство сквозной авторизации Windows и требование безопасности по вводу пароля. Идея заключается в следующем: в настройках пользователя 1С включается «Аутентификация операционной системы», но при этом в базе задается и пароль 1С.

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

Рассмотрим пример кода в модуле управляемого приложения:


Процедура ПриНачалеРаботыСистемы()
    
    ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
    
    // Проверяем, задан ли сохраненный хеш пароля у пользователя 1С
    Если ЗначениеЗаполнено(ТекущийПользовательИБ.СохраняемоеЗначениеПароля) Тогда
        
        ВведенныйПароль = "";
        Если НЕ ВвестиСтроку(ВведенныйПароль, "Введите пароль для доступа к 1С:", 50, Истина) Тогда
            ЗавершитьРаботуСистемы(Ложь);
            Возврат;
        КонецЕсли;
        
        // Хешируем введенный пароль алгоритмом SHA-1
        Хеширование = Новый ХешированиеДанных(ХешФункция.SHA1);
        Хеширование.Добавить(ВведенныйПароль);
        ДвоичныеДанныеХеша = Хеширование.Завершить();
        
        // Преобразуем полученный хеш в строку Base64
        ВычисленныйХешBase64 = Base64Строка(ДвоичныеДанныеХеша);
        ВычисленныйХешBase64 = СтрЗаменить(ВычисленныйХешBase64, Символы.ПС, "");
        ВычисленныйХешBase64 = СтрЗаменить(ВычисленныйХешBase64, Символы.ВК, "");
        
        // Сравниваем со значением, хранящимся в платформе
        Если ВычисленныйХешBase64 <> ТекущийПользовательИБ.СохраняемоеЗначениеПароля Тогда
            ПоказатьПредупреждение(, "Введен неверный пароль!");
            ЗавершитьРаботуСистемы(Ложь);
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры

В этом примере объект ХешированиеДанных выполняет вычисление хеша SHA-1, после чего результат приводится к формату Base64 для сравнения со свойством СохраняемоеЗначениеПароля объекта ПользовательИнформационнойБазы.

Вариант 4. Контроль соответствия ПК и учетной записи Windows

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

При запуске системы с помощью функций ИмяПользователяОС() и ИмяКомпьютера() считываются параметры текущего окружения и сверяются с разрешенным списком.

Рассмотрим пример функции проверки:


Процедура ПроверитьРабочееМестоПользователя()
    
    ЛогинОС = ИмяПользователяОС();
    ИмяПК   = ИмяКомпьютера();
    
    // Получаем текущего пользователя информационной базы 1С
    ИмяПользователя1С = ИмяПользователя();
    
    // Проводим проверку соответствия логина ОС и пользователя 1С
    Если Найти(ЛогинОС, ИмяПользователя1С) = 0 Тогда
        ЗафиксироватьПопыткуНесанкционированногоВхода(ЛогинОС, ИмяПК, ИмяПользователя1С);
        ВызватьИсключение "Ошибка аутентификации: Вы пытаетесь войти под чужой учетной записью 1С!";
    КонецЕсли;

КонецПроцедуры

Рекомендации по безопасности системного уровня

Для полной защиты информации технические меры в 1С рекомендуем дополнять настройками операционной системы и регламентами:

  1. Настроить групповые политики Active Directory (GPO) на автоматическую блокировку экрана сеанса Windows (сочетание клавиш Win+L) при отсутствии активности в течение 3–5 минут.
  2. В коммерческих организациях с повышенными требованиями к безопасности внедрить приказ по информационной безопасности, предусматривающий дисциплинарную ответственность за оставление разблокированного рабочего места.
← На главную