Я столкнулся с тем, что после переноса базы с помощью перехода в облачный сервис сбрасываются пароли пользователей.
Появилась идея написать обработку, с помощью которой я перенесу пароли пользователей из одной базы в другую.
В процессе реализации в обработке появились следующие возможности:
1. Получение списка пользователей с отображением хеш паролей и признака защита от опасных действий
2. Если сохранить таблицу в виде табличного документа, то полученный файл можно загрузить с помощью этой же обработки в другой базе
3. Просмотр хеш произвольного пароля, и отбор тех пользователей, у кого такой пароль до сих пор установлен.
4. Можно любому пользователю внести новое значение хеш пароля.
Процедура ЗаполнитьПользователей() заполняет табличную часть обработки.
&НаСервере
Процедура ЗаполнитьПользователей()
Объект.ПользователиИБ.Очистить();
МассивПользователейИБ = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекПользователь Из МассивПользователейИБ Цикл
НоваяСтр = Объект.ПользователиИБ.Добавить();
НоваяСтр.Имя = ТекПользователь.Имя;
НоваяСтр.ПолноеИмя = ТекПользователь.ПолноеИмя;
НоваяСтр.УникальныйИдентификатор = Строка(ТекПользователь.УникальныйИдентификатор);
НоваяСтр.ХешПароля = ТекПользователь.СохраняемоеЗначениеПароля;
// в разных версиях платформы может не работать
Попытка
НоваяСтр.ЗащитаОтОпасныхДействий = ТекПользователь.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях;
Исключение
КонецПопытки;
КонецЦикла;
КонецПроцедуры
В поле СохраняемоеЗначениеПароля были значения, типа Ib0S3Bg/dA7nbye3jrOcitlyp1c=,jnODoRNp0WhNqBgIvOOhy0CmqnY=
Я узнал, что в поле СохраняемоеЗначениеПароля хранится не сам пароль, а его хеш функция, сформированная из строки пароля по алгоритму SHA-1 и упакованная по алгоритму base64. При этом, там через запятую есть 2 части, одна для пароля, а вторая для пароля в верхнем регистре.
Для проверки некоторых паролей я создал функцию, которая возвращает хеш по этому алгоритму.
&НаСервере
Функция ВычислитьХешПароля(ПарольДляПроверки)
//вычисляем хеш для строки
АлгоритмШифрования = Новый ХешированиеДанных(ХешФункция.SHA1);
АлгоритмШифрования.Добавить(ПарольДляПроверки);
ХешСуммаПароля = Base64Строка(АлгоритмШифрования.ХешСумма);
ХешПароля = ХешСуммаПароля+",";
//и добавляем через запятую хеш для паролья в верхнем регистре
АлгоритмШифрования = Новый ХешированиеДанных(ХешФункция.SHA1);
АлгоритмШифрования.Добавить(ВРег(ПарольДляПроверки));
ХешСуммаПароляВВерхнемРегистре = Base64Строка(АлгоритмШифрования.ХешСумма);
ХешПароля = ХешПароля+ ХешСуммаПароляВВерхнемРегистре;
Возврат ХешПароля;
КонецФункции
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.194.23
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.37.14
Вступайте в нашу телеграмм-группу Инфостарт