Как программно изменить пароль пользователя 1с

Работа с паролями пользователей в 1С программно. Как задать пароль пользователя, как установить проверку сложности пароля, как проверить правильность пароля

Для того чтобы программно задать пароль пользователя в 1С, нужно сначала получить нужного пользователя информационной базы. Для этого используется метод НайтиПоИмени() менеджера пользователей информационной базы.

Пользователь = «Иванов Иван Иванович»;
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь);

Установка нового пароля

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

ПользовательИБ.Пароль = «q12345»;

После установки пароля свойство ПарольУстановлен пользователя информационной базы примет значение Истина. Пароль начнет работать после перезапуска системы.

Установка требований к сложности пароля в 1С

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

При включении этой функции пароль проверяется на соответствие следующим требованиям:

  • Длина не менее 7 символов;
  • Содержит не менее 3-х типов символов:
    • заглавные буквы;
    • строчные буквы;
    • цифры;
    • спец. символы.
  • Не совпадает с именем пользователя;
  • Не является последовательностью символов.

Можно включить эту функцию программно:

УстановитьПроверкуСложностиПаролейПользователей (Истина);

Для проверки вводимого пользователем пароля на соответствие этим требованиям попытаемся создать временного пользователя с заданным паролем. В функцию мы будем передавать сам новый пароль. Функция будет возвращать значение Истина, если пароль соответствует требованиям, и Ложь — если не соответствует.

Функция ПарольСоответствуетТребованиям (Пароль)

//Убедимся, что проверка сложности включена
УстановитьПроверкуСложностиПаролейПользователей(Истина);

//Создадим временного пользователя и установим его параметры
ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
ВременныйПользовательИБ.АутентификацияСтандартная = Истина;
ВременныйПользовательИБ.Имя = НСтр(«ru = ‘Временный пользователь'»)+
» (« + Строка(Новый УникальныйИдентификатор) + «)»;

//Установим временному пользователю требуемый пароль
ВременныйПользовательИБ.Пароль = Пароль;

//Попытаемся записать временного пользователя.
//Если появится ошибка, значит пароль не соответствует требованиям
ХорошийПароль = Истина;

Попытка

ВременныйПользовательИБ.Записать();

Исключение

ХорошийПароль = Ложь;

КонецПопытки;

//Удалим временного пользователя
ВременныйПользовательИБ.Удалить();

Возврат ХорошийПароль;

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

Как программно проверить пароль пользователя 1С

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

Пароль из информационной базы мы можем получить только в хешированном виде через свойство СохраняемоеЗначениеПароля пользователя ИБ.

Для проверки соответствия введенного пароля паролю из информационной базы можно использовать следующую функцию. В нее мы передадим введенный пароль и имя пользователя. Функция вернет значение Истина, если пароль соответствует паролю информационной базы, и Ложь — если не соответствует.

Функция ПроверитьПароль (Пользователь, Пароль)

//Получим пользователя ИБ
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь);

//Получим хешированное представление введенного пароля
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1);
ХешированиеДанных.Добавить(Пароль);
ХешированныйНовыйПароль = Base64Строка(ХешированиеДанных.ХешСумма);
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1);
ХешированиеДанных.Добавить(ВРег(Пароль));
ХешированныйНовыйПароль = ХешированныйНовыйПароль + «,»+ Base64Строка(ХешированиеДанных.ХешСумма);

//Сравним полученный хешированный пароль и хешем пароля в информационной базе
Возврат ХешированныйНовыйПароль = ПользовательИБ .СохраняемоеЗначениеПароля;

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

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

Появилась возможность дополнить форму аутентификации вопросами «Забыли пароль?» и «Нужна помощь?», установив соответствующее отражение их в параметрах ИБ.

Рис.1 Новая форма
Рис.1 Новая форма

Что делать пользователю?

Если пользователь жмет на первый вопрос, происходит:

  • Проход по гиперссылке;
  • Формирование электронного письма с кодом восстановления пароля из типового сервиса 1С;
  • Передача электронного письма с кодом, но с той почты, адрес которой был задан администратором.

При первом варианте откроется страница браузера, которая даст возможность администратору или партнеру задать свои настройки для «поведения» при данной операции.

При втором – запускается типовой сервис 1С, который поможет восстановить доступ через указание e-mail адрес пользователя. Вариант отправки электронного письма, чтобы поменять пароль в 1С, через настраиваемый почтовый сервер, позволяет админу написать любой текст и выбрать любые настройки оформления отправки.

Рис.2 Укажите e-mail
Рис.2 Укажите e-mail

При положительной проверке введенного адреса высылается код, и пользователь видит новшество – форму смены пароля.

Рис.3 Форма смены пароля
Рис.3 Форма смены пароля

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

В «1С:Предприятие» встроена защита от попыток подбора кодов подтверждения, параметры этой защиты можно установить в параметрах ИБ.

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

Для тех, кто нажал «Нужна помощь?», админ может прописать сайт с подробными инструкциями, как восстановить пароль в 1С, и контактными данными на случай возникновения проблем.

Настройки проверки подлинности

Изменять такие настройки можно посредством конфигуратора или встроенного языка.

В первом случае – в «Администрирование» нужно найти новый раздел по допнастройкам проверки.

Рис.4 Пункт в меню «Администрирование»
Рис.4 Пункт в меню «Администрирование»

Здесь можно найти множество возможностей по настройке, в том числе для редактирования текста отправляемого электронного письма.

Рис.5 Дополнительные настройки проверки
Рис.5 Дополнительные настройки проверки

Во втором случае – глобальный контекст встроенного языка получил новый объект ДополнительныеНастройкиАутентификации (AdditionalAuthenticationSettings).

Например:


   НастройкиВосстановленияПароля = Новый НастройкиВосстановленияПаролей(); 
   НастройкиВосстановленияПароля.СпособВосстановленияПароля = 
   СпособВосстановленияПароляПользователяИнформационнойБазы.ПереходПоНавигационнойСсылке; 
   НастройкиВосстановленияПароля.ПользовательSMTP = "admin@1c.ru"; 
   НастройкиВосстановленияПароля.ПарольSMTP = "123"; 
   НастройкиВосстановленияПароля.ПортSMTP = 465; 
   НастройкиВосстановленияПароля.ИспользоватьSSL = Истина; 
   НастройкиВосстановленияПароля.ИмяОтправителя = "Администратор"; 
   НастройкиВосстановленияПароля.Заголовок = "Восстановление пароля"; 
   НастройкиВосстановленияПароля.ТекстСообщенияHTML =  "Введите код   
  | &VerificationCode для сброса пароля.
";    ДополнительныеНастройкиАутентификации.УстановитьНастройкиВосстановленияПароля( НастройкиВосстановленияПароля);

Результат применения такого кода – в возможностях корректировки пользователей ИБ появились новые поля.

Рис.6 Новые поля
Рис.6 Новые поля

Также во встроенном языке аналогичные параметры прибавлены в тип данных ПользовательИнформационнойБазы, то есть АдресЭлектроннойПочты и ЗапрещеноВосстанавливатьПароль.

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

Работа с файловой версией 1С 8.3

Основные действия мы будем производить с файлом формата 1CD из папки, где расположена информационная база. Существует два варианта убрать пароли для входа в 1С – HEX-редакторы и программа TOOL1CD. Программы эти можно без труда найти в интернете и большинство из них бесплатны.

В первом случае смысл заключается в отключении таблицы с пользователями, чтобы заставить 1С считать, что в ИБ их нет. После этого платформа запускает конфигурацию с правами администратора, и мы можем создать новых пользователей: открываем файл 1CD в установленном HEX-редакторе и через поиск ищем в формате Unicode «users.usr».

Рис.7 Unicode «users.usr»
Рис.7 Unicode «users.usr»

В найденной строке найдем значение «09» и изменим число, расположенное левее, с «00» на «01». После этого, воспользовавшись поиском, находим строку «v8users» и меняем первую букву на любую другую. Делаем мы это, чтобы 1С не нашел эту строку и подумал, что в нашей базе нет ни одного пользователя. На этом работа с HEX-редактором закончена, но нам еще нужно воспользоваться утилитой «chdbfl.exe».

Рис.8 Утилита «chdbfl.exe»
Рис.8 Утилита «chdbfl.exe»

Найти ее можно в папке bin, находящейся внутри каталога, куда установлена платформа. Это программа проверяет и исправляет файловые базы, а в нашем случае может помочь избежать встречи с ошибкой формата потока.

Второй способ основан на том, чтобы именно изменить пароль у конкретного пользователя на пустой. Для этого открываем файл ИБ в программе TOOL1CD и в списке таблиц находим «V8USERS», где содержатся данные всех пользователей. Чтобы получить пароль в виде хеш-формата SHA-1, нажимаем на поле DATA строки конкретного пользователя и заменяем значение там на «2jmj7l5rSw0yVb/vlWAYkK/YBwk= », означающее пустой пароль.

Рис.9 Изменить пароль у конкретного пользователя на пустой
Рис.9 Изменить пароль у конкретного пользователя на пустой

С помощью кнопки «Записать» под табличной частью сохраняем данные поля в текстовый файл.

Рис.10 Сохранение в текстовый файл
Рис.10 Сохранение в текстовый файл

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

Рис.11 Режим редактирования таблицы
Рис.11 Режим редактирования таблицы

После этого остается подтвердить изменения кнопкой с зеленой галкой.

Рис.12 Подтверждаем изменения
Рис.12 Подтверждаем изменения

Снятие пароля в 1С успешно завершилось!

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

Работа с клиент-серверной 1С

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

  1. Запускаем утилиту для управления БД;
  2. Создаем запрос, в котором будем переименовывать таблицу v8users и файл users.usr, чтобы 1С не смогла их распознать. Вместо «DatabaseName» пропишем имя собственной базы

    
    USE [DatabaseName]
    GO
    EXEC sp_rename 'v8users', 'v8users_tmp'
    GO
    UPDATE [Params]
    SET [FileName] = 'users.usr_tmp'
    WHERE [FileName] = ’users.usr‘
    GO
    
  3. Выполняем запрос кнопкой F5;
  4. Запускаем 1С. Если все сделали верно, 1С не спросит логина и пароля, а запустится сразу же с полными правами;
  5. Не закрывая конфигуратор, создаем еще один запрос в утилите управления БД. Его суть в возвращении таблицы пользователей

    
    USE [DatabaseName]
    GO
    DROP TABLE [v8users]
    GO
    EXEC sp_rename 'v8users_tmp', 'v8users'
    GO
    UPDATE [Params]
    SET [FileName] = 'users.usr'
    WHERE [FileName] = ’users.usr_tmp‘
    GO
    
  6. После очередного выполнения текста запроса возвращаемся в конфигуратор и создаем нового пользователя с правами администратора. Также можно просто изменить пароль у одного из действующих;
  7. Перезагружаем конфигуратор и входим под тем пользователем, которому назначили новый пароль.

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

Если помимо сброса пароля у вас регулярно возникают вопросы, обратитесь к нашим специалистам. Мы с радостью проконсультируем вас, а также подберем для вас оптимальную цену на сопровождение 1С, ориентируясь на ваши индивидуальные задачи.

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

Скачать скомпиллированную версию можно в разделе с релизами — https://github.com/alekseybochkov/PasswordChanger1C/releases/

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

Правила использования

Запрещается использование приложения для несанкционированного доступа к данным!
Используя данное приложение Вы подтверждаете, что базы данных, к которым будет предоставлен доступ, принадлежат Вашей организации и Вы являетесь Администратором с неограниченным доступом к информации этих баз данных.
Несанкционированный доступ к информации преследуются по ст. 1301 Гражданского кодекса РФ, ст. 7.12 Кодекса Российской Федерации об административных правонарушениях, ст. 146 Уголовного кодекса РФ.

Отказ от ответственности

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

Благодарность

Огромная благодарность Валерию Агееву за его работу по разбору внутренних форматов 1С и утилиту Tool_1CD.
Краткое описание формата файлов *.1CD (файловых баз 1Сv8)

Спасибо Pavel Fomin за работу по анализу изменений в 8.3.8 — Формат баз 1CD — классические и 8.3.8.

Принцип работы

В клиент-серверном варианте список пользователей хранится в таблице V8USERS, а хеш пароля в зашифрованном виде в поле DATA.
Приложение дешифрует строку из поля DATA, заменяет оба хеша (первый обычный, второй для пароля в верхнем регистре) на хеш введенной строки, шифрует строку с тем же ключем и записывает бинарные данные для указанного пользователя обратно в таблицу V8USERS.
Доступ к базе не требует монопольного режима.

В файловом варианте информационной базы логическая структура данных и алгоритмы обработки аналогичны, но данные упакованы в соответствии с внутренним форматом 1С.
Таблица пользователей считывается целиком, производится изменение в нужных строках, затем вся таблица BLOB данных для всех пользователей перезаписывается в файл информационной базы.
Требуется монопольный доступ для открытия ИБ и записи данных в нее.

В хранилище конфигурации 1С список пользователей хранится в таблице USERS, а некий хеш пароля в поле PASSWORD. Т.к. я не разобрал что это за формат хеша, то сделал только возможность установить пустой пароль (это фиксированная строка «d41d8cd98f00b204e9800998ecf8427e»). Таблица пользователей считывается целиком, производится изменение значений PASSWORD в нужных строках, затем вся таблица пользователей записывается в файл хранилища.
Требуется монопольный доступ для открытия ИБ и записи данных в нее.

Скриншоты с примерами

Файловая информационная база

Клиент-серверная информационная база

Хранилище конфигурации 1С

Поддержка и развитие

Предложения, вопросы, комментарии, а также обнаруженные ошибки оставляйте, пожалуйста, в Issues.

Вопрос такой, Можно ли например сменить пароль у пользователя, программно? Простой пример для чего: сделать при каждом запуске смену пароля у пользователя на текущую дату. Можно ли такое сделать? если да, то как?

если для 77, то делай свою формочку с паролем, если для 8X, то да, можно..

Путем взлома внешней Юзердеф.длл Но проше привязаться к Виндовой аутотентификации и не париться с безопасностью в 1С

нанять мальчика для смены паролей… желательно непьющего…

да есть такая ВК Admin1C.dll

вот даже описание процедуры SetPassword, УстановитьПароль Процедура Устанавливает для пользователя, имя которого передано первым параметром, новый пароль, заданный вторым параметром. На настоящий момент рекомендовано только для DBF, поскольку на SQL базе пропадают параметры подключения к ИБ (ввиду того, что компонента не обновляет значение контрольной суммы в 1cv7.dba).

+ 1 Точно, Админ1С.длл Но это, однако, уже взлом 1С-ки

Да для 77. Спасибо, щас поищу про нее что-нить.

Потому что юзердеф курочит

Чего там UserDef курочить ? Пароли живут в файле Users.usr — а это Compound Document. Пароль записан в виде контрольной суммы MD5 от строки пароля, приведённой к верхнему регистру. И что сложного в том. чтобы его поменять ? Конечно, сказать, что такое решение «штатное» — сложно.

как дети блин! НЕЛЬЗЯ ДАВАТЬ полный доступ на запись для пользователя! а по этому нельзя сделать САБЖ!

а что-бы пользователи не парились с паролями

обычно ввод пароля пользователя в системе реализуется уже после запуска 1С, чтобы иметь возможность не только сменить пароль пользователя, но и сменить пользователя не закрывая 1С. А наличие записи в этот файл не сильно ограничивает безопасность, так как если можно прочитать файл (и воспользоваться таблицей md5), то можно и собрать пароль. P.S. В случае sql базы можно ограничивать безопасность на уровне sql-сервера, а в случае dbf базы про безопасность вообще вспоминать не принято.

SQL пароль и логин получить гораздо проще чем пароль пользователя, можешь проверить на ссылке в версии со сканером безопасности. самая главная ошибка, что народ путает понятия «безопасность» и «стойкость к взлому» — это разные вещи…

1С вообще не обеспечивает хорошей безопасности, как и любое приложение, работающее под Windows — только терминальный режим спасает от многих проблем.

не спасает и терминал :) но я знаю одно решение: в сети ставиться железяка которая работает только на порт 1433, весь трафик она переправляет на другой сервер, но при этом делает 3 вещи: 1. подменяет параметры SQL авторизации 2. пишет лог (по определенным правилам) 3. в зависимости от компа режет выборки (типа RLS) после этого злоумышленику добраться до чужих данных будет проще через взлом админских доменных паролей, а это уже уровень защиты информации очень приличный.

иногда просто логгирование сетевого трафика в организации, проводимое злоумышленником, позволяет ему получить информации больше, чем простым копированием базы. Ладно — мне пора домой, и обсуждать вопросы безопасности буду на следующей неделе. А автор, всего лишь, хотел менять пароли пользователя (я с этой задачей так и не справился, а написал интерфейс для авторизации на 1С). Удачи.

борьба со сниферами уже выходит за рамки простых мер безопасности, причин на то много, думаю тут в дебри не стоит влезать…

Тэги:

Комментарии доступны только авторизированным пользователям

Понравилась статья? Поделить с друзьями:
  • Как программно изменить значение реквизита справочника
  • Как программно изменить значение регистра при вводе начальных остатков 1с
  • Как программно изменить значение константы
  • Как программно изменить заголовок формы 1с
  • Как программно изменить голос