Пароль пользователя в 1С из кода: что можно прочитать, а что только сбросить

· 9 мин

Содержание

Получить пароль пользователя 1С программно в открытом виде нельзя. Платформа 1С:Предприятие 8.3 не хранит пароли: в базе лежит только хэш, а свойство Пароль объекта ПользовательИнформационнойБазы доступно лишь на запись. Через встроенный язык можно задать новый пароль, узнать, установлен ли он, скопировать хэш в другую базу и сверить введённую строку с хэшем.

Все задачи, ради которых обычно ищут «как достать пароль», решаются этими легальными методами. А при входе через домен Active Directory пароль 1С не нужен вовсе: его проверяет Windows.

Что умеет встроенный язык 1С с паролями пользователей

Пользователи базы — это объекты ПользовательИнформационнойБазы. Их получают через менеджер ПользователиИнформационнойБазы:

  • 🔎 ПолучитьПользователей() — массив всех пользователей базы;
  • 🔎 НайтиПоИмени("Кладовщик") — один пользователь по имени;
  • 🔎 ТекущийПользователь() — тот, кто сейчас работает в сеансе;
  • 🆕 СоздатьПользователя() — новый пользователь.

Что из свойств связано с паролем:

СвойствоЧтениеЗаписьЧто даёт
ПарольнетдаУстановить новый пароль
ПарольУстановленданетУзнать, задан ли пароль вообще
СохраняемоеЗначениеПаролядадаХэш пароля: перенос, сверка
ЗапрещеноИзменятьПарольдадаЗапретить пользователю менять пароль самому
АутентификацияСтандартнаядадаВход по имени и паролю 1С
АутентификацияОСдадаВход под учётной записью Windows

Работать с этими объектами может только код на сервере и только при праве «Администрирование». Если код выполняет обычный пользователь, нужен привилегированный режим: УстановитьПривилегированныйРежим(Истина).

Пример: найти пользователей без пароля

Частая задача аудита — список тех, кто входит в базу с пустым паролем:

&НаСервере
Процедура ПроверитьПустыеПаролиНаСервере()

    УстановитьПривилегированныйРежим(Истина);

    Для Каждого Пользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
        Если Пользователь.АутентификацияСтандартная
            И Не Пользователь.ПарольУстановлен Тогда
            Сообщить(Пользователь.Имя + ": пароль не задан");
        КонецЕсли;
    КонецЦикла;

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

Пример: сбросить пароль из кода

Вместо «получить старый пароль» задайте новый и передайте его пользователю:

&НаСервере
Процедура СброситьПарольНаСервере(ИмяПользователя, НовыйПароль)

    УстановитьПривилегированныйРежим(Истина);

    Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
    Если Пользователь = Неопределено Тогда
        ВызватьИсключение "Пользователь " + ИмяПользователя + " не найден";
    КонецЕсли;

    Пользователь.Пароль = НовыйПароль;
    Пользователь.Записать();

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

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) у каждого пользователя есть ещё элемент справочника «Пользователи», связанный с пользователем базы по идентификатору. Пароль из кода менять можно, а вот создавать и удалять пользователей лучше через карточку справочника — иначе связь разорвётся.

Хэш пароля 1С: как он хранится и что с ним делать

Свойство СохраняемоеЗначениеПароля возвращает строку из двух частей через запятую. Обе части — хэши SHA-1 в кодировке Base64: первая от пароля как есть, вторая от пароля в верхнем регистре. Соли нет.

Из этого следуют три практических вывода:

  1. ✅ Хэш можно скопировать в другую базу, и у пользователя там будет тот же пароль.
  2. ✅ Введённую строку можно сверить с хэшем, не зная исходного пароля.
  3. ⚠️ Хэш без соли подбирается перебором для простых паролей. Значит, сама строка хэша — чувствительные данные, их нельзя выгружать в открытые файлы и логи.

Перенос паролей между базами

Типичный сценарий — переезд на новую базу, когда пользователей создают заново, а просить всех сменить пароль не хочется. Выгрузите из старой базы пары «имя — хэш» и запишите их в новой:

// В старой базе: собрать хэши
&НаСервере
Функция ПолучитьХэшиПаролей()

    УстановитьПривилегированныйРежим(Истина);
    Результат = Новый Соответствие;

    Для Каждого Пользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
        Если Пользователь.ПарольУстановлен Тогда
            Результат.Вставить(Пользователь.Имя, Пользователь.СохраняемоеЗначениеПароля);
        КонецЕсли;
    КонецЦикла;

    Возврат Результат;

КонецФункции

// В новой базе: записать хэш пользователю
&НаСервере
Процедура УстановитьХэшПароля(ИмяПользователя, Хэш)

    УстановитьПривилегированныйРежим(Истина);
    Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
    Если Пользователь <> Неопределено Тогда
        Пользователь.СохраняемоеЗначениеПароля = Хэш;
        Пользователь.Записать();
    КонецЕсли;

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

Файл с хэшами передавайте по защищённому каналу и удаляйте сразу после загрузки.

Проверка пароля без его получения

Иногда нужно подтвердить действие паролем: например, перед проведением документа задним числом. Сверьте хэш введённой строки с первой частью сохранённого значения:

&НаСервере
Функция ПарольВерный(ИмяПользователя, ВведенныйПароль)

    УстановитьПривилегированныйРежим(Истина);
    Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
    Если Пользователь = Неопределено Или Не Пользователь.ПарольУстановлен Тогда
        Возврат Ложь;
    КонецЕсли;

    Хеширование = Новый ХешированиеДанных(ХешФункция.SHA1);
    Хеширование.Добавить(ВведенныйПароль);
    ХэшВвода = Base64Строка(Хеширование.ХешСумма);

    Части = СтрРазделить(Пользователь.СохраняемоеЗначениеПароля, ",");
    Возврат ХэшВвода = СокрЛП(Части[0]);

КонецФункции

Перед внедрением проверьте функцию на тестовом пользователе с известным паролем, включая пароль с кириллицей. Формат хранения задаёт платформа, и проверка «на живом» пользователе снимает вопросы о кодировке.

Внешняя обработка для администратора: сброс и аудит паролей

Код выше удобно собрать во внешнюю обработку (.epf) — тогда не придётся менять конфигурацию. Её открывают через Файл → Открыть в режиме «1С:Предприятие» под пользователем с правом «Администрирование».

Что полезно заложить в такую обработку:

  • 📋 таблицу пользователей с колонками «Пароль задан», «Стандартный вход», «Вход через ОС», «Запрещено менять пароль»;
  • 🔄 кнопку сброса пароля выбранному пользователю на случайный, с выводом нового значения один раз;
  • 📤 выгрузку и загрузку хэшей для переноса между базами;
  • 🔒 проверку права в начале: ПравоДоступа("Администрирование", Метаданные).

Генерировать временный пароль лучше генератором случайных чисел платформы, а не «Пароль123»:

Функция СлучайныйПароль(Длина = 10)

    Символы = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
    Генератор = Новый ГенераторСлучайныхЧисел;
    Результат = "";
    Для Сч = 1 По Длина Цикл
        Позиция = Генератор.СлучайноеЧисло(1, СтрДлина(Символы));
        Результат = Результат + Сред(Символы, Позиция, 1);
    КонецЦикла;
    Возврат Результат;

КонецФункции

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

Пароли в конфигураторе, программе и консоли кластера

Не всё нужно делать кодом. Для разовых задач хватает штатных интерфейсов.

ГдеПутьЧто можно сделать с паролем
КонфигураторАдминистрирование → ПользователиЗадать новый пароль, включить или отключить вход через ОС
Программа на БСПАдминистрирование → Настройки пользователей и прав → ПользователиСменить пароль в карточке, запретить вход
Программа на БСПАдминистрирование → Настройки пользователей и прав → Настройки входаМинимальная длина, сложность, срок действия пароля
Консоль кластераСписок сеансов информационной базыУвидеть, кто подключён, и завершить сеанс

Консоль администрирования серверов 1С работает с другими паролями. Это пароль администратора кластера, пароль администратора информационной базы для операций в консоли и пароль пользователя СУБД в свойствах базы. Пароли пользователей 1С консоль не показывает и не меняет.

Из командной строки с сеансами работает утилита rac через сервер администрирования ras. Например, rac session list выводит сеансы. Параметры конкретных команд смотрите в справке rac help.

Завершение сеанса из консоли обрывает работу пользователя без сохранения. Предупредите людей заранее или делайте это вне рабочего времени.

Если забыт пароль администратора кластера, не пересоздавайте кластер. Остановите службу сервера 1С, восстановите файл настроек кластера из резервной копии или обратитесь к администратору сервера.

Обходные пути: почему пароль 1С не стоит «доставать»

В сети встречаются советы править служебную таблицу пользователей прямо в файле базы или в СУБД, подменять хэши, подбирать их по словарю. Пошагово мы их не разбираем, и вот почему:

  • 💥 правка служебных таблиц в обход платформы ломает базу, восстановить её помогает только резервная копия;
  • 🕵️ подбор хэша — это получение чужого пароля без согласия владельца, то есть уже не администрирование;
  • 🔓 подобранный пароль часто совпадает с паролем от почты и домена, и вред выходит за пределы 1С.

Есть и бытовые утечки, которые находят чаще всего:

  • 📌 ярлыки запуска с параметрами /N и /P — пароль лежит в свойствах ярлыка открытым текстом;
  • 📌 строки подключения в коде обработок и обменов (Usr=...;Pwd=...) и в регламентных скриптах;
  • 📌 пароли в общих файлах-памятках рядом с базой.

Если задача — войти в базу, где все забыли пароль администратора, правильный путь простой. Найдите в конфигураторе пользователя с правами администратора, у которого пароль известен. Если такого нет — восстановите базу из копии или обратитесь к специалисту, который делает это с письменного согласия владельца базы.

Зачем вам понадобился пароль пользователя?

Юридическая сторона и политика паролей в компании

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

Самовольный подбор чужого пароля и вход под чужой учётной записью могут подпадать под статью 272 УК РФ о неправомерном доступе к компьютерной информации. В базах 1С лежат персональные данные сотрудников и контрагентов, поэтому доступ к ним регулирует и закон № 152-ФЗ.

Что закрепить во внутреннем регламенте:

  1. Кто имеет право сбрасывать пароли и по какой заявке.
  2. Временный пароль выдаётся лично, после первого входа пользователь меняет его сам.
  3. Минимальная длина и сложность пароля — в настройках входа программы.
  4. Служебные учётки для обменов и регламентных заданий — отдельные, без интерактивного входа.
  5. Пароли не хранятся в ярлыках, коде и общих папках.

Вход в 1С без пароля: доменная аутентификация и автоматизация

Самый чистый способ избавиться от проблемы паролей 1С — не хранить их вовсе. При аутентификации операционной системы пользователь входит в 1С под своей учётной записью Windows. Пароль проверяет контроллер домена Active Directory, а в базе 1С записано только имя доменной учётки.

Настроить вручную можно в конфигураторе (Администрирование → Пользователи, флажок аутентификации операционной системы) или в карточке пользователя в программе на БСП. Для десятков пользователей удобнее код:

&НаСервере
Процедура ПривязатьКДомену(ИмяПользователя, ДоменныйЛогин)

    УстановитьПривилегированныйРежим(Истина);
    Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
    Если Пользователь = Неопределено Тогда
        Возврат;
    КонецЕсли;

    // Формат: \\ДОМЕН\логин
    Пользователь.АутентификацияОС = Истина;
    Пользователь.ПользовательОС = "\\CORP\" + ДоменныйЛогин;
    Пользователь.Записать();

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

Порядок перевода, чтобы никого не запереть:

  1. Включите вход через ОС, но оставьте стандартную аутентификацию.
  2. Попросите пользователя войти без ввода пароля и убедитесь, что 1С узнаёт его.
  3. Только после этого отключайте стандартный вход: АутентификацияСтандартная = Ложь.
  4. Оставьте хотя бы одного администратора со стандартным входом на случай проблем с доменом.

Для тестирования без смены пользователя Windows запустите клиент с параметром /WA- — он отключает попытку входа через ОС и показывает обычное окно логина.

В клиент-серверном варианте доменный вход работает «из коробки» в тонком и толстом клиенте. Для веб-клиента нужна дополнительная настройка веб-сервера , на котором опубликована база.

Когда пароль всё же нужен в коде

Внешнее соединение (COM) и подключение к базе из скриптов требуют имя и пароль в строке подключения, если база не настроена на вход через ОС. В этом случае:

  • 👤 заведите отдельного служебного пользователя только с теми правами, которые нужны обмену;
  • 🗝️ храните его пароль вне кода: в параметрах службы, в защищённом хранилище секретов сервера или в настройках задания с ограниченным доступом;
  • 🔁 меняйте пароль служебной учётки по графику и сразу после увольнения сотрудника, который его знал.

Если обмен запускается под доменной учётной записью службы, привяжите её к пользователю 1С через ПользовательОС. Тогда пароль в строке подключения не нужен совсем.

Частые вопросы

Можно ли узнать пароль пользователя 1С, если у меня права администратора?
Нет. Администратор может только задать новый пароль. Старый пароль в базе не хранится, есть лишь его хэш.
Что вернёт чтение свойства Пароль у пользователя ИБ?
Свойство предназначено только для записи. Чтобы узнать, задан ли пароль, используйте свойство ПарольУстановлен.
Сохранится ли пароль при выгрузке базы в .dt и загрузке на другом компьютере?
Да. Пользователи и хэши их паролей входят в выгрузку, поэтому в загруженной базе пароли прежние.
Можно ли запретить пользователю менять свой пароль?
Да, свойство ЗапрещеноИзменятьПароль или соответствующий флажок в списке пользователей конфигуратора. Это удобно для общих служебных учётных записей.
Как войти в обработку обмена без хранения пароля в коде?
Запускайте обмен регламентным заданием на сервере под служебным пользователем либо используйте доменную аутентификацию для учётки, под которой работает служба.

Источники

  • Уголовный кодекс РФ, ст. 272 «Неправомерный доступ к компьютерной информации»
  • Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных»