Администрирование · 12 мин
1С: как программно узнать пароль пользователя
Почему пароль пользователя 1С нельзя прочитать программно, как устроено хранение хэшей, и какие легальные способы проверки и сброса пароля доступны администратору.
Вопрос «как программно узнать пароль пользователя 1С» возникает у администраторов и разработчиков регулярно — например, при миграции пользователей между базами или при восстановлении доступа. Короткий ответ: узнать пароль в открытом виде нельзя, и это сделано намеренно. Платформа 1С:Предприятие не хранит пароли пользователей как текст — она хранит только их криптографические хэши, и обратное преобразование невозможно даже средствами встроенного языка.
Объект ПользовательИнформационнойБазы предоставляет свойства Имя, АутентификацияСтандартная, Пароль и другие, но свойство Пароль работает только на запись. При попытке прочитать его вы получите пустую строку или неопределённое значение — платформа физически не отдаёт хэш наружу через встроенный язык. Это осознанное архитектурное решение, защищающее базу от утечек даже при компрометации кода конфигурации.
Поэтому практическая задача формулируется иначе: не «узнать пароль», а «проверить, подходит ли пароль», «сбросить пароль» или «установить новый». Все эти сценарии реализуются штатными средствами, и именно их разберём ниже.
Как 1С хранит пароли и почему их нельзя прочитать
При установке пароля платформа вычисляет от него хэш с использованием стойкой хэш-функции и сохраняет результат в служебных таблицах информационной базы. Сам пароль нигде не остаётся. При входе пользователя система хэширует введённое значение и сравнивает хэши — совпадение означает верный пароль.
Из этого следуют два практических вывода. Во-первых, ни один метод встроенного языка не вернёт пароль или его хэш: менеджер пользователей (ПользователиИнформационнойБазы) такого API не предоставляет. Во-вторых, даже прямой доступ к таблицам СУБД не даст пароля в открытом виде — там лежат только хэши, подобрать исходное значение к которым возможно лишь перебором, что выходит за рамки легального администрирования.
Если вам встречаются внешние утилиты, обещающие «показать пароли пользователей 1С», относитесь к ним с осторожностью: они либо выполняют подбор по словарю, либо эксплуатируют уязвимости старых версий, либо являются вредоносным ПО. Использование таких инструментов в рабочей базе — прямой риск утечки данных и юридических последствий.
Проверка пароля без его раскрытия
Частая реальная задача — не узнать пароль, а убедиться, что известное вам значение подходит конкретному пользователю, например при синхронизации учётных записей с внешней системой. Прямого метода «ПроверитьПароль» во встроенном языке нет, но есть обходные приёмы.
Один из рабочих вариантов — попытка подключения к информационной базе через COM-connector или веб-сервис с указанием проверяемых логина и пароля. Если соединение установлено — пара верна; если получена ошибка аутентификации — пароль не подходит. Метод рабочий, но медленный и создаёт нагрузку, поэтому массовую проверку так не делают.
Процедура ПроверитьПарольЧерезCOM(ИмяПользователя, Пароль)
Попытка
Connector = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=\"Server\";Ref=\"Base\";Usr=\"" + ИмяПользователя + "\";Pwd=\"" + Пароль + "\";";
Соединение = Connector.Connect(СтрокаПодключения);
Сообщить("Пароль верный");
Исключение
Сообщить("Пароль не подходит: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедурыДля базы с типовой Библиотекой стандартных подсистем (БСП) есть дополнительные возможности: подсистема «Пользователи» ведёт собственные механизмы контроля, а журнал регистрации фиксирует события аутентификации, по которым можно косвенно судить об успешных входах.
Как программно установить или сменить пароль пользователя
Установка нового пароля — полностью легальная и штатная операция, доступная коду с правами администрирования. Для этого используется объект ПользовательИнформационнойБазы: находим пользователя по имени, присваиваем свойству Пароль новое значение и записываем объект.
Процедура УстановитьПароль(ИмяПользователя, НовыйПароль)
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если ПользовательИБ = Неопределено Тогда
ВызватьИсключение "Пользователь не найден";
КонецЕсли;
ПользовательИБ.Пароль = НовыйПароль;
ПользовательИБ.АутентификацияСтандартная = Истина;
ПользовательИБ.Записать();
КонецПроцедурыОбратите внимание на несколько условий. Код должен выполняться под пользователем с правом «Администрирование» (или в привилегированном режиме на сервере). Свойство Пароль записывается только вместе с включённой стандартной аутентификацией — если флаг АутентификацияСтандартная снят, пароль игнорируется. После записи старый пароль перестаёт действовать немедленно, активные сеансы при этом не разрываются автоматически.
При установке пароля учитывайте требования к сложности, если они заданы в настройках информационной базы: слишком простой пароль может быть отклонён при записи с выдачей исключения.
- 1Убедитесь, что код выполняется с правами администрирования или в привилегированном режиме
- 2Найдите пользователя через ПользователиИнформационнойБазы.НайтиПоИмени
- 3Присвойте свойству Пароль новое значение и включите АутентификацияСтандартная
- 4Вызовите метод Записать() и перехватите возможное исключение
- 5Проверьте вход под новым паролем в тестовом сеансе
Сброс пароля, когда он утерян
Если пароль утерян и известных административных учётных записей в базе нет, программная установка невозможна — для неё нужен уже авторизованный сеанс с правами. В файловой базе выходом служит утилита конфигуратора или вход без пароля, если в базе вообще не задано пользователей с паролями. В клиент-серверном варианте пароль может сбросить администратор кластера через консоль администрирования или администратор СУБД с последующей настройкой.
Типовой сценарий восстановления выглядит так: администратор с действующим доступом программно или через конфигуратор устанавливает пользователю временный пароль, пользователь входит и меняет его на собственный. В конфигурациях на БСП можно дополнительно включить требование смены пароля при первом входе.
Как выбрать действие
Массовая обработка пользователей и типичные ошибки
При миграции или ревизии доступа часто нужно обработать всех пользователей разом: сбросить пароли, сгенерировать временные, выгрузить список. Перебор выполняется методом ПользователиИнформационнойБазы.ПолучитьПользователей(), который возвращает массив объектов. Важно выполнять такую обработку на сервере в привилегированном режиме и в монопольном или малонагруженном окне, чтобы не мешать работе пользователей.
Отдельная ошибка — попытка «синхронизировать пароли» между базами через выгрузку. Поскольку хэши недоступны, перенести пароли между базами штатно нельзя. Практикуемые варианты: задать всем временные пароли с обязательной сменой при входе либо перевести базы на аутентификацию операционной системы (доменную), где пароль проверяет Windows, а не 1С.
Альтернативы парольной аутентификации
Если задача «узнать пароль» продиктована интеграционными потребностями, часто правильнее вообще уйти от паролей 1С. Платформа поддерживает аутентификацию средствами операционной системы: пользователь входит в 1С под своей доменной учётной записью без отдельного пароля, а управление доступом централизуется в Active Directory.
Для внешних систем и веб-клиентов в современных версиях платформы доступна аутентификация по токенам доступа (OpenID Connect и смежные механизмы), а также сертификатам. Эти способы снимают необходимость где-либо хранить или передавать пароли пользователей 1С.
Сравнение вариантов доступа
Простая настройка, но пароль нельзя ни прочитать, ни перенести; подходит для небольших баз
Пароль проверяет домен, 1С его не хранит; требует доменной инфраструктуры и сопоставления пользователей
Подходит для интеграций и веб-доступа; требует настройки публикации и внешнего поставщика удостоверений
Проверка результата и контроль безопасности
После любой операции с паролями убедитесь, что результат соответствует ожиданиям. Минимальный контроль: вход под новым паролем в тестовом сеансе, проверка отказа со старым паролем, просмотр журнала регистрации на предмет событий аутентификации. Для массовых операций полезно записывать в журнал регистрации факт смены пароля с указанием пользователя — это упростит разбор инцидентов.
Как проверить результат
Сеанс открывается штатно
Ошибка аутентификации — проверьте флаг АутентификацияСтандартная и требования к сложности
Доступ отклонён
Старый пароль всё ещё работает — запись пользователя не выполнилась
Выполняются без ошибок
Ошибки аутентификации — под ними использовался сменённый пароль, нужно обновить настройки подключений
Наконец, помните об организационной стороне: любой, кто может выполнять код с правами администрирования, может сменить пароль любому пользователю. Ограничивайте круг таких сотрудников, ведите учёт операций и не храните пароли в скриптах, обработках и текстовых файлах.
Что важно запомнить
Пароль пользователя 1С программно прочитать нельзя — платформа хранит только хэш. Легальные инструменты администратора: проверка пары логин/пароль через тестовое подключение, установка нового пароля через ПользователиИнформационнойБазы и административный сброс. Для интеграций рассмотрите аутентификацию ОС или токены вместо паролей.
Частые вопросы
Можно ли получить хэш пароля пользователя через встроенный язык 1С?
Нет. Менеджер пользователей информационной базы не предоставляет методов для чтения ни пароля, ни его хэша. Свойство Пароль объекта ПользовательИнформационнойБазы доступно только для записи. Хэши физически хранятся в служебных таблицах, но штатного API для доступа к ним нет.
Как перенести пользователей с паролями из одной базы 1С в другую?
Пароли перенести нельзя, поскольку недоступны даже их хэши. Практические варианты: выгрузить список пользователей с ролями и настройками, задать всем временные пароли с требованием смены при первом входе, либо перевести обе базы на аутентификацию операционной системы, где пароль хранится в домене, а не в 1С.
Почему после программной установки пароля пользователь не может войти?
Чаще всего не включён флаг АутентификацияСтандартная — без него пароль игнорируется. Также проверьте, что пользователь не заблокирован (свойство ЗапрещеноИзменятьПароль и настройки блокировки), что пароль соответствует требованиям сложности базы и что запись объекта действительно выполнилась без исключения.
Можно ли проверить пароль пользователя, не прерывая его работу?
Да, через тестовое подключение: COM-соединение, соединение через веб-сервис или HTTP-запрос к опубликованной базе с проверяемой парой логин/пароль. Успешное подключение означает верный пароль. Учтите, что каждая неудачная попытка фиксируется в журнале регистрации и при настроенной блокировке может временно заблокировать учётную запись.
Что делать, если утерян пароль единственного администратора файловой базы?
Если в базе есть другой пользователь с правом администрирования — войдите под ним и смените пароль. Если такого пользователя нет, штатных средств восстановления платформа не предоставляет; обычно прибегают к помощи специалистов по восстановлению доступа. Чтобы не попадать в такую ситуацию, держите в базе минимум две административные учётные записи.
Законно ли использовать утилиты для подбора паролей 1С?
В собственной базе и с согласия владельца — юридически допустимо, но практически бессмысленно: проще и быстрее сбросить пароль административно. Применение таких утилит к чужим базам без разрешения — несанкционированный доступ и уголовно наказуемое деяние независимо от результата.