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

17.11.11

Администрирование - Пароли

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

Скачать файлы

Наименование Файл Версия Размер
Периодическая смена паролей пользователей базы 1С
.zip 644,19Kb
81
.zip 644,19Kb 81 Скачать

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

В доменных политиках Windows  есть такая удобная штука, как принудительная периодическая смена пароля учетной записи пользователя. Давно хотелось сделать что-то подобное и для 1С-ки.

Реализация выполнена на конфигурации "Альфа-Авто" от "Рарус", но в принципе, с минимальными доработками, портируема и на другие конфигурации.

Всего необходимо внести четыре изменения:

 

Изменение первое: в раздел "Константы" добавляются две константы (см. пример 1):

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

2. ПериодичностьСменыПароля - Число(3,0) - здесь указывается период в днях, через который потребуется смена пароля.

Эти константы необходимо добавить в экранную форму редактирования констант (см. пример 2). Для удобства администрирования я повесил на событие "ПериодичностьСменыПароляПриИзменении" простую процедуру:

 

Процедура ПериодическаяСменаПароляПриИзменении(Элемент)
  	Если ПериодическаяСменаПароля Тогда
  		ТекстВопроса = "Установить ";
    		ЗначениеДляПодстановки = истина;
	 Иначе
     		ТекстВопроса = "Снять ";
     		ЗначениеДляПодстановки = ложь;
	 КонецЕсли;
	ТекстВопроса = ТекстВопроса+"у всех пользователей признак ""Периодическая смена пароля""?"; 	
	Если   Вопрос( ТекстВопроса,РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да  Тогда
  		 Запрос = Новый Запрос;
    		 Запрос.Текст = "ВЫБРАТЬ | Пользователи.Ссылка КАК Ссылка |ИЗ | Справочник.Пользователи КАК Пользователи";
    		 РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    		 Размер = РезультатЗапроса.Количество();
   		 Для каждого элПользователь Из РезультатЗапроса Цикл
     			обПользователь = элПользователь.Ссылка.ПолучитьОбъект();
     			обПользователь.ПериодическаяСменаПароля  = ЗначениеДляПодстановки;
     			обПользователь.Записать();
   			Состояние(Строка(РезультатЗапроса.Индекс(элПользователь))+"/"+Размер);
   		КонецЦикла;
	КонецЕсли;
КонецПроцедуры
 

 

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

 

Второе изменение, которое необходимо внести, это дополнительные реквизиты справочника "Пользователи"(см. примеры 3,4):

1. Реквизит "ПериодическаяСменаПароля" - булева типа

2. Реквизит "ДатаПоследнейСменыПароля" - типа "Дата", состав "Дата"

 Реквизит "ПериодическаяСменаПароля" в справочнике "Пользователи" необходим для того, чтобы можно было отключать смену пароля у части пользователей. Как пример, служебные учетные записи, используемые для автоматического запуска обработок ("Robot", "BackUp" и т.д.).

Третье изменение: в какой-либо из существующих или вновь созданный глобальный модуль добавляются  несколько процедур:

Процедура раПроверитьСрокПароля(Пользователь) Экспорт
	Если раПарольПросрочен(Пользователь) Тогда
		раСменитьПароль(Пользователь);
	КонецЕсли;
КонецПроцедуры
 Функция раПарольПросрочен(ТекПользователь) Экспорт	Если Константы.ПериодическаяСменаПароля.Получить()  Тогда
		Если ТекПользователь.ПериодическаяСменаПароля Тогда
			ПериодичностьСменыПароля = Константы.ПериодичностьСменыПароля.Получить() * 24 * 60 * 60; 
				// из количества дней приводим к 1С-кому формату временной разницы 				
				ДатаСменыПароля = НачалоДня(ТекПользователь.ДатаПоследнейСменыПароля + ПериодичностьСменыПароля); 			
				Если ДатаСменыПароля <= НачалоДня(ТекущаяДата()) Тогда
				Возврат истина;
			КонецЕсли; 
		КонецЕсли;
	КонецЕсли;
	Возврат ложь;
	
КонецФункции // ПарольПросрочен(ТекПользователь) 
Процедура раСменитьПароль(спрПользователь)Экспорт
	#Если Клиент Тогда 		
		ТекПользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя()); 		
		ОбъектПользователь = спрПользователь.ПолучитьОбъект();
		ТекстПредупреждения = " В соответствии с политикой информационной безопасности организации"+Символы.ПС+
		"пароль пользователя должен изменяться каждые "+Константы.ПериодичностьСменыПароля.Получить()+ " дней."+Символы.ПС+
		"---------------------------------------------------------------------------------------------------------------------------------------------"+ Символы.ПС +
		"Пароль пользователя должен удовлетворять следующим требованиям сложности:"+ Символы.ПС +
		"---------------------------------------------------------------------------------------------------------------------------------------------"+ Символы.ПС +
		"Длина не менее "+ПолучитьМинимальнуюДлинуПаролейПользователей()+" символов."+Символы.ПС+
		"Содержит не менее 3-х типов символов из перечисленных ниже:"+Символы.ПС+
		" заглавные буквы"+Символы.ПС+
		" строчные буквы"+Символы.ПС+
		" цифры"+Символы.ПС+
		" спец.символы"+Символы.ПС+
		"Не совпадает с именем пользователя."+Символы.ПС+
		"Не является последовательностью символов.";
		Предупреждение(ТекстПредупреждения,60);
		ВведенТекущийПароль = ложь;
		Пока НЕ ВведенТекущийПароль Цикл
			ТекущийПароль = "";
			Подсказка = "Введите текущий пароль";
			Если Не ВвестиПароль(ТекущийПароль, Подсказка) Тогда
				ЗавершитьРаботуСистемы(ложь);
				Возврат;
			КонецЕсли;
			Если ПарольДействует(ТекущийПароль) Тогда
				ВведенТекущийПароль = истина;
			КонецЕсли; 
		КонецЦикла; 
		ПарольЗаменен = ложь;
		Пока НЕ ПарольЗаменен Цикл
			ТекстПароля1 = "";
			Подсказка = "Смена пароля. Введите новый пароль";
			Если Не ВвестиПароль(ТекстПароля1, Подсказка) Тогда
				ЗавершитьРаботуСистемы(ложь);
				Возврат;
			КонецЕсли; 
			
			ТекстПароля2 = "";
			Подсказка = "Повторите новый пароль";
			Если Не ВвестиПароль(ТекстПароля2, Подсказка) Тогда
				ЗавершитьРаботуСистемы(ложь);
				Возврат;
			КонецЕсли;    
			Если ТекстПароля1<>ТекстПароля2 Тогда
				Предупреждение("Введенные пароли не совпадают!",10);
			ИначеЕсли ТекущийПароль = ТекстПароля1 Тогда 	
				Предупреждение("Новый пароль не должен совпадать со старым!",10);
			Иначе
				ТекПользователь.Пароль=ТекстПароля1;
				Попытка                  
					ТекПользователь.Записать();
					ОбъектПользователь.ДатаПоследнейСменыПароля = ТекущаяДата();
					ОбъектПользователь.Записать();
					ПарольЗаменен = истина;
				Исключение
					ТекстОшибки = ОписаниеОшибки();
					Место = Найти(ТекстОшибки,"Записать):");
					Длина = СтрДлина(ТекстОшибки);
					ТекстОшибки = Прав(ТекстОшибки,Длина - Место-10);
					Если ТекстОшибки = "Заданный пароль короче установленной минимальной длины" Тогда
						ТекстОшибки = ТекстОшибки +": "+ ПолучитьМинимальнуюДлинуПаролейПользователей()+" символов.";				
					КонецЕсли; 
					Если ТекстОшибки = "Заданный пароль не удовлетворяет требованиям сложности" Тогда
						ТекстОшибки = ТекстОшибки +": "+ Символы.ПС +
						+"-----------------------------------------------"+ Символы.ПС +
						"Длина не менее "+ПолучитьМинимальнуюДлинуПаролейПользователей()+" символов."+Символы.ПС+
						"Содержит не менее 3-х типов символов из перечисленных ниже:"+Символы.ПС+
						" заглавные буквы"+Символы.ПС+
						" строчные буквы"+Символы.ПС+
						" цифры"+Символы.ПС+
						" спец.символы"+Символы.ПС+
						"Не совпадает с именем пользователя."+Символы.ПС+
						"Не является последовательностью символов.";
					КонецЕсли; 
					Предупреждение(ТекстОшибки,60);
					// здесь штатными средствами платформы выдается сообщение, чем пароль не устраивает 				
				КонецПопытки; 			
			КонецЕсли; 
		КонецЦикла; 
		ПериодичностьСменыПароля = Константы.ПериодичностьСменыПароля.Получить() * 24 * 60 * 60;
		ДатаСледующейСмены =  спрПользователь.ДатаПоследнейСменыПароля + ПериодичностьСменыПароля;
		ТекстПредупреждения = 	"Пароль пользователя изменен."+Символы.ПС+
		"Благодарим за понимание."+Символы.ПС+
		"Следующая смена пароля: "+Формат(ДатаСледующейСмены,"ДЛФ=DD");
		Предупреждение(ТекстПредупреждения,10);
	#КонецЕсли 
КонецПроцедуры 
Функция ПарольДействует(ТекущийПароль)
	СтрокаСоединения =  СтрокаСоединенияИнформационнойБазы()+" ";
	Логин = "Usr="""+ИмяПользователя()+"""; ";
	Пароль = "Pwd="+ТекущийПароль;
	СтрокаСоединения = СтрокаСоединения + Логин + Пароль;
	cntr = Новый COMObject("V82.COMConnector");
	Попытка
		connection = cntr.Connect(СтрокаСоединения);
		ПарольДействует = истина;
	Исключение
		ОписаниеОшибки = ОписаниеОшибки();
		Если Найти(ОписаниеОшибки,"Неправильное имя или пароль пользователя")>0 Тогда
			ПарольДействует = ложь;
		Иначе
			ПарольДействует = истина;
		КонецЕсли; 
	КонецПопытки;
	connection = "";
	cntr = "";
	Возврат ПарольДействует;		
КонецФункции

Функция ВвестиПароль(ТекстПароля, Подсказка)	
НоваяФорма = ПолучитьОбщуюФорму("ВводПароля",,"Моя форма");
	НоваяФорма.Заголовок = Подсказка;
	ПароляТекст = НоваяФорма.ОткрытьМодально();
	Если ПароляТекст <> Неопределено Тогда
		ТекстПароля = ПароляТекст;
		Возврат истина;
	Иначе
		Возврат ложь;
	КонецЕсли;
КонецФункции

 

 И, наконец, четвертое изменение:

В процедуру "ПриНачалеРаботы" модуля приложения добавляется вызов процедуры "раПроверитьСрокПароля(ПараметрыСеанса.Пользователь)".

 

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

Далее, если есть пользователи, у которых не должен периодически меняться пароль, необходимо снять у данных элементов справочника "Пользователи" соответствующую галочку реквизита "Периодическая смена пароля".

Собственно, и вся настройка.

Теперь, при первом последующем заходе пользователя в базу данных у него выйдет диалоговое окно, оповещающее о необходимости смены пароля (см. пример 5).

После этого пользователю будет предложено ввести старый пароль.

Тут позволю себе небольшое отступление:

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

Для этого мы создаем объект "V82.COMConnector", прописываем в его параметрах путь к базе, имя пользователя и введенный им пароль. После этого пробуем соединиться с базой данных . Если соединение прошло успешно - пароль верный. Если была возвращена ошибка "Неправильное имя или пароль пользователя", то значит, пользователь пытается нас обмануть. Еще возможна ошибка "Данному пользователю не разрешены внешние соединения", но она возникает уже после успешной авторизации. Нас и такой вариант устроит. Пароль ведь верный, а это все, что нам сейчас надо знать.

Далее пользователю предлагается ввести и подтвердить новый пароль (см . пример 6).

Если пароль не удовлетворяет требованиям по сложности, то пользователю будет выведено об этом сообщение (см. пример 7) и будет предложено ввести новый пароль еще раз.

Еще одно отступление:

Параметры сложности паролей пользователей настраиваются в режиме "Конфигуратор", в меню "Администрирование" - "Параметры информационной базы" (см. пример 8). Здесь можно выставить минимально допустимую длину пароля, а проверку сложности пароля пользователя. Пароль в таком случае будет проверяться по наличию как минимум, трех различных групп символов:  цифры, большие и маленькие буквы, а также различные раскладки клавиатуры.

Если пользователь не захочет вводить старый или новый пароли, то работы системы будет завершена.

Итак, пользователь успешно ввел новый пароль, отвечающий требованиям безопасности.  Теперь, в течение прописанного в константе "ПериодичностьСменыПароля" (например, 60 дней) система оставит пользователя в покое. А по истечении этого срока, вновь потребует сменить пароль.

К сожалению, ничего не мешает пользователю поменять пароль на новый, а затем в пользовательском режиме зайти в "Сервис" - "Параметры пользователя" и там поменять пароль опять на старый. Но для этого необходимо, чтобы пользователь знал об этой возможности, а о ней, как показывает практика знают очень мало пользователей. Для того, чтобы отсечь эту возможность, пришлось бы хранить пароли пользователей в базе в открытом виде, а это, по моему мнению, излишний в данном случае, риск.

И в заключение, несколько моментов организационного порядка:

  1. Безопасность информации в базе данных должна обеспечиваться комплексом мер, и периодическая смена паролей пользователей,  это только одна из них. Описание других мер обеспечения безопасности информации выходит за рамки данной статьи.
  2. Периодическую смену паролей пользователей в 1С логичнее всего вводить параллельно с введением периодической смены паролей пользователей доменных учетных записей. При этом желательно, выставить одинаковые требования по длине и сложности паролей . Периоды смены паролей лучше тоже выставить одинаковые, но разнести периодичность на пару дней (например, пароли на доменные учетные записи изменялись в понедельник, а на учетные записи 1С – в среду). Это позволит сделать смену паролей менее болезненной для пользователей.
  3. Введение данного новшества неминуемо столкнется  с пассивным, а может, и активным, противодействием пользователей. Наиболее действенным средством, основываясь на практике, служит приказ по организации примерно следующего содержания:  «Ответственность за действия, совершенные под  учетной записью пользователя, в том числе, и другими лицами, несет сам пользователь. Пользователю запрещается передавать пароли от своих учетных записей другим лицам. Пользователь, отходя от своего рабочего места, обязан заблокировать сессию, во избежание доступа других лиц к ней.  Пароли на учетные записи пользователей должны изменяться с периодичностью в 60 дней. За простой, вызванный утерянным паролем от учетной записи, несет ответственность  сам пользователь ».  С данным приказом следует ознакомить всех пользователей под роспись. Этим сразу снимается колоссальная доля психологической инерции и негатива пользователей.
  4. В любой, наверно, организации есть пользователи, любящие забывать пароли.  После введения данного новшества частота забывания ими пароля гарантировано вырастет в разы. Эффективным средством дисциплинирования таких пользователей служит фиксация фактов внеплановой смены пароля. Причем, вероятнее всего, даже не придется выкладывать данную статистику на стол руководителя. Зачастую пользователю хватает того факта, что тот факт, что он опять забыл пароль, фиксируется, например в «Тетради фиксации внеплановой смены пароля». Чаще всего, пользователь немедленно вспоминает свой пароль.  

P.S. Дополнительно хотелось бы прикрутить проверку на несовпадение паролей пользователя Windows  и пользователя базы 1С. К сожалению, мне не удалось найти способа сравнения данных паролей.

 

См. также

Подключение по RDP из 1С с автоматическим вводом пароля

Удаленное управление Пароли Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Как дать доступ сотруднику к удаленному рабочему столу (RDP), но при этом не давать пароль доступа?

2 стартмани

25.03.2024    3291    2    dungeonkeeper    1    

9

Сохранение учетных данных от Webkassa, Розница для Казахстана, ред 2.3

Пароли Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Казахстан Абонемент ($m)

Расширение позволяет сохранить данные о логине и пароле для сервиса Webkassa.kz и при каждом входе в РМК не вводить эти данные, что позволяет сократить время при входе в РМК для кассиров.

1 стартмани

12.12.2023    318    1    anuar_medeup    0    

0

Сохранение учетных данных для WebKassa для Казахстана

Пароли Платформа 1С v8.3 Конфигурации 1cv8 Казахстан Абонемент ($m)

Расширение для запоминания в базе логина пароля для авторизации на сервисе WebKassa.

1 стартмани

28.08.2023    585    2    BadMadJohn    0    

2

Массовая генерация и замена паролей пользователей

Пароли Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Абонемент ($m)

ДОБАВЛЕНА ГЕНЕРАЦИЯ ПАРОЛЯ! Запускаем обработку, смотрим на список пользователей и делаем свое дело, выделяем нужных или всех сразу и назначаем пароль. Особенно помогает, когда ну очень большая организация. ДОБАВЛЕНА ГЕНЕРАЦИЯ ПАРОЛЯ!

1 стартмани

28.08.2023    711    1    Maxiko    3    

4

Групповая генерация паролей для рассылки отчетов в ЗУП 3

Пароли Платформа 1С v8.3 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Генерирует и устанавливает пароль разной сложности для каждого элемента из выбранной папки справочника Рассылка отчетов. Для генерируемого пароля есть выбор длины и сложности (цифры, большие и маленькие буквы, спецсимволы) . Есть опция установки в качестве пароля номера паспорта сотрудника. После обновления на ЗУП 3.1.27.23 обработка быстро создаст новые пароли взамен созданных до обновления на этот релиз (и после обновления - "исчезнувших"). Об изменениях в хранении паролей для справочника Рассылки отчетов с версии ЗУП 3.1.27.23. Описание и обход ошибки в функции общего модуля ПользователиСлужебный.СоздатьПароль(ПараметрыПароля()).

1 стартмани

10.08.2023    816    3    bugtester    0    

3

Ошибка аутентификации клиента средствами операционной системы: Аутентификационный контекст клиента отсутствует в рабочем процессе

Пароли Платформа 1С v8.3 Бесплатно (free)

Устранение ошибки "Ошибка аутентификации клиента средствами операционной системы: Аутентификационный контекст клиента отсутствует в рабочем процессе", при вызове метода "УстановитьСоединенение()".

05.06.2023    1783    yuryshestakov    0    

6

Скрипт для создания пользователей на сервере

Роли и права Пароли Абонемент ($m)

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

1 стартмани

30.05.2023    1826    4    user1093325    6    

6

Чтение / Запись данных в регистр "Безопасное хранилище данных"

Пароли Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

20.01.2023    3307    13    baidinden    0    

4
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sergson1 15.11.11 10:30 Сейчас в теме
Очень необходимая вещь, для тех кто работает в больших организациях и не доверяет своим коллегам))
2. veforg 27 15.11.11 10:37 Сейчас в теме
Лучше использовать доменную авторизацию чем выдумывать свой велосипед.
ukkom; zekrus; alex_bob; левый слон; +4 Ответить
4. dka80 20 16.11.11 08:04 Сейчас в теме
(2) доменная авторизация хороша там, где один компьютер - один пользователь. А если взять торговый зал магазина? А если мне надо зайти под другим пользователем 1С из текущего сеанса ОС?
rippi; antidot_alf; cleaner_it; +3 Ответить
5. alon 171 16.11.11 10:31 Сейчас в теме
(4)А для этого придумали switch user, run as different user, log off наконец. Все уж лучше, чем заставлять продавцов помнить по 5 паролей.
17. Abadonna 3958 18.11.11 03:47 Сейчас в теме
(5)
А для этого придумали switch user, run as different user, log off наконец. Все уж лучше, чем заставлять продавцов помнить по 5 паролей.

А кто мешает при авторизации 1С ввести тот же доменный пароль? И не помнить по 5?
21. Kaperang 98 18.11.11 07:51 Сейчас в теме
(17) Abadonna, ну как бы, если у всех учетных записей пользователя одинаковые пароли, это не есть гуд. Это азы информационной безопасности. А вообще, приходится, как правило, делать компромисс между требованиями безопасности и удобством работы пользователей.
23. Kaperang 98 18.11.11 08:10 Сейчас в теме
(17) Abadonna, правильно, пока ничего не мешает. Поэтому и ищу способ сравнения паролей доменной учетной записи и учетной записи 1С.
9. ms200999 17.11.11 15:49 Сейчас в теме
(2) Например, работаем через веб-клиент с нетбука на пляже. Какая доменная авторизация?
Опять же, случаются внешние пользователи, не имеющие учетной записи в домене.
45. lilprince 20.01.21 12:25 Сейчас в теме
(9) Ну так же и будешь подключаться: сначала по впн со своими логином и паролем АД, а затем по рдп (со своим логином и паролем) к своему компьютеру (хоть к виртуальному)
3. Altair777 644 15.11.11 13:05 Сейчас в теме
(0) "P.S. Дополнительно хотелось бы прикрутить проверку на несовпадение паролей пользователя Windows и пользователя базы 1С. К сожалению, мне не удалось найти способа сравнения данных паролей."

И, кажется, не найдешь. :)
1С хранит не сами пароли, а их хеш. Насчет Винды не уверен, но если и нее и 1С одинаковый алгоритм шифрования, то можно сравнивать хеши. Кстати, смену паролей я тоже делал, но немножко другими методами.
6. YuliaYVS 27 16.11.11 12:35 Сейчас в теме
Вещь хорошая, а если ещё поставить ограничения на количество повторов ввода пароля ))), потом и сам не зайдешь.
7. AAndryA 17.11.11 13:45 Сейчас в теме
Дали недавно анологичную задачу ! Щас смотреть буду может подойдет и велосипед изобретать не придется !
8. AAndryA 17.11.11 15:44 Сейчас в теме
В процедуру "ПриНачалеРаботы" модуля приложения добавляется вызов процедуры "раПроверитьСрокПароля(ПараметрыСеанса.Пользователь)". Я что то саму процедуру не вижу ! :(
10. babylon_5 55 17.11.11 18:28 Сейчас в теме
(8) похоже имеется в виду функция 'раПарольПросрочен'
11. Kaperang 98 17.11.11 18:49 Сейчас в теме
(8)AAndryA, прошу прощения - мой недосмотр. Процедура выглядит так:
Процедура раПроверитьСрокПароля(Пользователь) Экспорт
	Если раПарольПросрочен(Пользователь) Тогда
		раСменитьПароль(Пользователь);
	КонецЕсли;
КонецПроцедуры
12. babylon_5 55 17.11.11 20:14 Сейчас в теме
Продолжаем...
/*********************
1) Ошибка при вызове метода контекста (ПолучитьОбщуюФорму)
НоваяФорма = ПолучитьОбщуюФорму("ВводПароля",,"Моя форма");

2) Ошибка при установке значения атрибута контекста (ПериодическаяСменаПароля)
обПользователь.ПериодическаяСменаПароля = ЗначениеДляПодстановки;
по причине:
Реквизит недоступен для группы
13. Kaperang 98 17.11.11 20:32 Сейчас в теме
(12) babylon_5,

1) упс....да, совсем забыл ... нужно добавить еще общую форму под названием "ВводПароля"
с одним реквизитом формы "Пароль" строкового типа с установленным свойством "Режим пароля"и процедурой:

Процедура ПриЗакрытии

   Возврат Пароль;

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


завтра поправлю статью

2)тут вариантов решения ошибки два:
или установите для реквизита "ПериодическаяСменаПароля" справочника "Пользователи" свойство "Использование" в "Для группы и элемента".
или можно изменить соответствующий кусок кода с:
обПользователь = элПользователь.Ссылка.ПолучитьОбъект();
     			обПользователь.ПериодическаяСменаПароля  = ЗначениеДляПодстановки;
     			обПользователь.Записать();


на
Если НЕ элПользователь.ЭтоГруппа Тогда 
                        обПользователь = элПользователь.Ссылка.ПолучитьОбъект();
     			обПользователь.ПериодическаяСменаПароля  = ЗначениеДляПодстановки;
     			обПользователь.Записать();
КонецЕсли;
14. babylon_5 55 17.11.11 21:43 Сейчас в теме
(13)
тут вариантов решения ошибки два:

Хм, я пошел третьим путем. Группы отсеял еще в запросе.
Запрос.Текст = "ВЫБРАТЬ
		|	Пользователи.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.Пользователи КАК Пользователи
		|ГДЕ
		|	Пользователи.ЭтоГруппа = ЛОЖЬ"


P.S. А почему публикация не активна?
15. babylon_5 55 18.11.11 00:57 Сейчас в теме
(13) И вот вместо этого:
Процедура ПриЗакрытии

   Возврат Пароль;

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

может таки что-то вроде:
Процедура ОсновныеДействияФормыОк(Кнопка)
   Закрыть(Пароль);
КонецПроцедуры

А то как-то не гармонирует. Процедура,.. Возврат...
19. Kaperang 98 18.11.11 07:40 Сейчас в теме
(15)Согласен. Писал по памяти на скорую руку. Сегодня выложу оригинальный рабочий код из базы.
16. babylon_5 55 18.11.11 01:29 Сейчас в теме
Еще может родиться проблема с "V82.ComConnector" если база запускается не под последней установленной на компьютере версией платформы. Например стоит что-то из 8.2.14, а базу запускаем под 8.2.13. Вот тут-то и родится... прикол с созданием объекта...
22. Kaperang 98 18.11.11 08:06 Сейчас в теме
(16) babylon_5, хорошее замечание. Надо будет воспроизвести на тестовой базе. Хотя для того, чтобы база запустилась в таком режиме, надо это прописать это в ее настройках (В окне списка баз - "Настройки баз" - "Используемые версии"). А это весьма редко используемая, на мой вгляд, настройка.
У нас был несколько иной вариант: изначально база была на 8.1, соответственно в коде стояло "V81.ComConnector".
При переходе на 8.2 этот кусок кода забыли поправить.
В итоге полмесяца система воспринимала любой введенный пользователем "от балды" пароль, как старый пароль системы.
Отрабатывала конструкция "Попытка-Исключение-КонецПопытки". Но база с ошибкой не вываливалась.
18. Abadonna 3958 18.11.11 04:07 Сейчас в теме
(0)
Ответственность за действия, совершенные под учетной записью пользователя, в том числе, и другими лицами, несет сам пользователь

Мне всегда было интересно: неужели найдется такой человек, который добровольно полезет в 1С под чужой учетно записью и будет там что-то делать?
А если он убежденный, целенаправленный вредитель, то, будь уверен, он найдет способ попасть в базу хоть по пять раз на дню пароль меняй!
ИМХО, опять "паранойя безопасности". И проггеры при деле :)))
20. Kaperang 98 18.11.11 07:47 Сейчас в теме
(18) Abadonna, реальный пример: у нас автоцентр. Есть станция СТО, где работают мастера-приемщики. И есть отдел запасных частей, где работают продавцы. Премию за проданную деталь получает тот, кто поставил ее в резерв под клиента. Соответственно, если есть право на корректировку резервов, возникает изкушение сбросить старый резерв, и зарезервировать деталь снова на того же клиента, но уже от своего имени. Ни у мастеров-приемщиков, ни у продавцов прав на снятие резервов нет. Но если как-бы вдруг, у кого-то из них оказался пароль от учетной записи пользователя, имеющего право на корректировку резервов....У нас такие ситуации были. Наказали обоих - и "злодея", и того, кто дал пароль от своей учетки.
24. Kaperang 98 18.11.11 08:32 Сейчас в теме
Вообще, уровень мер по информационной безопасности должен находится в прямой зависимости от размера организации, количества конкурентов в регионе и ценности информации в базе.
Ваш прокси-сервер никогда не пытались брут-форсить? И сотрудникам вашей организации никогда не предлагали продать клиентскую базу? Тогда естественно Вам непонятно то, что Вы называете "паранойей безопасности".

Меры информационной безопасности нужны, но впадать в фанатизм конечно не стоит. Повторюсь, нужный разумный компромисс между удобством работы пользователей и данными мерами.
25. Lyuba-Lyuba 23.11.11 10:24 Сейчас в теме
Считаю, очень полезно.
26. _ink_ 01.12.11 13:04 Сейчас в теме
Нужная вещь. Хотя на мой взгляд всё должно быть комплексно. Единственное что напрягает то это постоянно держать в голове кучу паролей. И, боюсь, что через несколько смен у большинства пользователей пароли будут уровня "123qwe" или всё будет писаться в ежедневник... Хотя это уже другая история и проблемы службы безопасности.
27. Oleg1708 17.01.12 16:58 Сейчас в теме
Вот тут тоже ошибка записи пароля будет, для Альфы.

ТекПользователь.Пароль=ТекстПароля1;
Попытка
ТекПользователь.Записать();
ОбъектПользователь.ДатаПоследнейСменыПароля = ТекущаяДата();
ОбъектПользователь.Записать();
ПарольЗаменен = истина;
Исключение

ОбъектПользователь - записывает пароль. И если его не установить то запишет старый. В альфе такой "прикол".
28. Kaperang 98 18.01.12 08:12 Сейчас в теме
(27) Oleg1708, а первая строка приведенного Вами куска кода что делает?

ТекПользователь.Пароль=ТекстПароля1;


Она как раз и устанавливает новый пароль.
Доработка работает на базе с конфигурацией "Рарус:Альфа-Авто" с >50 пользователями уже больше года.
Единственная трабла возникла при переходе на 8.2. Пришлось переписать в коде "V81.COMConnector" на "V82.COMConnector"
29. Oleg1708 18.01.12 09:54 Сейчас в теме
(28)
да да.
устанавливает. а эта:
ОбъектПользователь.Записать();

перезаписывает.

перезаписывает этого же пользователя со старым паролем. Но это в альфе такое, если у пользователя
админ.функции установлены.
в проц. призаписи есть такое:
Если ПользовательИБ <> Неопределено И ПравоДоступа("Администрирование", Метаданные) Тогда
Попытка
ПользовательИБ.Записать();
Исключение
Сообщить(ОписаниеОшибки());
Отказ = Истина;
Возврат;
КонецПопытки;
КонецЕсли;
30. Evgen2011 10.02.12 13:27 Сейчас в теме
Что-то не нашел процедуры на проверку сложносит пароля, хотя она вроде в описании указана
32. Kaperang 98 10.04.12 09:22 Сейчас в теме
(30) Evgen2011, сложность и длина пароля настраивается средствами самой платформы. Конкретно: Конфигуратор - Администрирование - Параметры информационной базы. Там можно включить проверку сложности пароля и минимальную его длину. При установке нового пароля (неважно,интерактивно или программно), если он не удолетворяет заданным условиям, то платформа вызывает исключение. Проще говоря, вываливается сообщение об ошибке. У меня это обрабатывается конструкцией:

ТекПользователь.Пароль=ТекстПароля1;
				Попытка                  
					ТекПользователь.Записать();
					ОбъектПользователь.ДатаПоследнейСменыПароля = ТекущаяДата();
					ОбъектПользователь.Записать();
					ПарольЗаменен = истина;
				Исключение
					ТекстОшибки = ОписаниеОшибки();
					Место = Найти(ТекстОшибки,"Записать):");
					Длина = СтрДлина(ТекстОшибки);
					ТекстОшибки = Прав(ТекстОшибки,Длина - Место-10);
					Если ТекстОшибки = "Заданный пароль короче установленной минимальной длины" Тогда
						ТекстОшибки = ТекстОшибки +": "+ ПолучитьМинимальнуюДлинуПаролейПользователей()+" символов.";				
					КонецЕсли; 
					Если ТекстОшибки = "Заданный пароль не удовлетворяет требованиям сложности" Тогда
Показать
31. пользователь 01.03.12 20:18
Сообщение было скрыто модератором.
...
33. ak0710 162 27.04.12 15:10 Сейчас в теме
Как раз требовалось такая фича, немного посмотрев комментарии удалось успешно установить данную наработку
34. Jetoo 55 05.06.12 05:28 Сейчас в теме
может кто-нибудь подсказать по поводу:

В файловом варианте все работает, а в серверном после ввода нового пароля выдает:
"После изменения в списке пользователей не осталось бы никого с административными правами"

посмотрел в справке Роли:
Тип: РолиПользователя. Содержит коллекцию ролей пользователя информационной базы.
Примечание:
Доступно только пользователю с административными правами.

И действительно, если у пользователя админские права - все проходит без ошибок. А без них похоже просто не видит ролей.

Но почему в файловом все работает и без админских?? Как сделать в серверном?
35. son_v 3 23.08.12 09:17 Сейчас в теме
Надо темку запомнить. Очень полезная. Спасибо.
36. suxo 13.07.13 03:45 Сейчас в теме
Подскажите, в программировании очень туго. Это можно применить к УТ 8,2 ? или надо много переписывать.
Если сделать все по плану то на УТ тоже заработает? Просто делать по плану буду долго, а если окажется в конце что это не работает на УТ 10,3 то будет грустно :)
37. tiniji 164 05.09.16 05:11 Сейчас в теме
Может кто-нибудь нашел как закрыть смену пароля через Сервис - Параметры пользователя ?
38. Synoecium 778 05.09.16 11:18 Сейчас в теме
(37) tiniji, А что если поставить галку "Запрет на изменение пароля"? В форме редактирования пользователя есть код, который отвечает за доступность пароля, теоретически его можно подредактировать и дать возможность менять несмотря на значение этой галки.
39. user600441_sonic400 06.09.16 14:20 Сейчас в теме
может я что-то не правильно понял но я пытаюсь запустить ее из модуля упраляемого прложения в процедуре ПриНачалеРаботыСистемы()
раПроверитьСрокПароля(Пользователь);
КонецПроцедуры;
просто не видит ее может сможете подсказать в чем косяк?
40. Kaperang 98 06.09.16 19:41 Сейчас в теме
(39) user600441_sonic400, обработка писалась 5 лет назад под обычные формы. Без "допиллинга" на управляемых формах точно не взлетит. Могу навскидку предположить:. 1. У общего модуля, в котором размещена процедура раПроверитьСрокПароля не включено свойство "Сервер". 2. Перед процедурой есть директива прекомпилятору "Если Клиент"
41. Kaperang 98 06.09.16 19:47 Сейчас в теме
(39) user600441_sonic400, в 8.2 не так давно появились методы работы с md5-хешем. В частности, получение хэша текущего пароля. Их использование, думаю может помочь в сравнении старого и нового паролей. В таком случае можно будет избежать "костыля" с использованием v8.connector. На выходных попробую переделать механизм под новые технологии.
42. Kaperang 98 06.09.16 19:53 Сейчас в теме
(39) user600441_sonic400, посмотрите еще вот эту обработку:тыц. Автор взял за основу мою обработку и "допилил" её под управляемые формы.
43. AnnaKalacheva 6 04.04.18 12:42 Сейчас в теме
Спасибо, очень помогло!
46. user1719247 20.06.23 14:12 Сейчас в теме
Перекроил для УТ 10.3, создал подобие "Потребовать смену пароля пользователя при входе". Большое спасибо.
Оставьте свое сообщение