При организации доступа к информационным базам 1С часто возникает задача подставить имя текущего пользователя операционной системы в окно авторизации, но при этом принудительно затребовать ввод пароля. Стандартное поведение платформы 1С:Предприятие ставит администратора перед выбором из двух вариантов:
Разберем подробнее варианты решения этой задачи, от организационно-скриптовых до глубокой программной доработки конфигурации.
Рассмотрим способ, не требующий внесения изменений в конфигурацию. Платформа 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%"
Разберем по шагам, как работает этот метод:
%USERNAME% возвращает логин пользователя, вошедшего в 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 для сравнения со свойством СохраняемоеЗначениеПароля объекта ПользовательИнформационнойБазы.
Выясним причину, почему одного ограничения списка выбора может быть недостаточно: пользователь может знать логин и пароль коллеги и войти под его учетными данными со своего компьютера. Для предотвращения таких ситуаций в 1С создают регистр сведений или справочник связки рабочих станций и пользователей.
При запуске системы с помощью функций ИмяПользователяОС() и ИмяКомпьютера() считываются параметры текущего окружения и сверяются с разрешенным списком.
Рассмотрим пример функции проверки:
Процедура ПроверитьРабочееМестоПользователя()
ЛогинОС = ИмяПользователяОС();
ИмяПК = ИмяКомпьютера();
// Получаем текущего пользователя информационной базы 1С
ИмяПользователя1С = ИмяПользователя();
// Проводим проверку соответствия логина ОС и пользователя 1С
Если Найти(ЛогинОС, ИмяПользователя1С) = 0 Тогда
ЗафиксироватьПопыткуНесанкционированногоВхода(ЛогинОС, ИмяПК, ИмяПользователя1С);
ВызватьИсключение "Ошибка аутентификации: Вы пытаетесь войти под чужой учетной записью 1С!";
КонецЕсли;
КонецПроцедуры
Для полной защиты информации технические меры в 1С рекомендуем дополнять настройками операционной системы и регламентами: