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

17.11.11

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Периодическая смена паролей пользователей базы 1С
.zip 644,19Kb
82
82 Скачать (1 SM) Купить за 1 850 руб.

В 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С. К сожалению, мне не удалось найти способа сравнения данных паролей.

 

См. также

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

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

2 стартмани

19.11.2024    109    0    slavok123    0    

1

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

Расширение добавляет возможность настроить обновление пароля пользователем через заданный промежуток времени в днях (1-99 дней). Также добавлен контроль: новый пароль не должен совпадать с предыдущим.

1 стартмани

11.11.2024    196    1    KonorArgent    0    

1

Информационная безопасность Пароли Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Простой пример формирования одноразового секрета (пароля, сообщения и т.п. информации) через указания ключа.

16.07.2024    724    maksa2005    0    

1

Инструменты администратора БД Пароли Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

13.06.2024    788    15    alexey.kutya    2    

3

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

В очередной раз пришлось поменять пароль пользователя sa в базе данных MS SQL, и поскольку эту процедуру приходится делать нечасто, решил записать последовательность действий для памяти. Коротко. Июнь 2024 г.

03.06.2024    4881    2ncom    9    

15

Информационная безопасность Пароли Платформа 1С v8.3 Бесплатно (free)

Все еще храните пароли в базе? Тогда мы идем к вам! Безопасное и надежное хранение секретов. JWT авторизация. Удобный интерфейс. Демо конфигурация. Бесплатно.

30.05.2024    6209    kamisov    17    

60

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

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

1 стартмани

15.05.2024    702    2    Лев    1    

1

Инструменты администратора БД Роли и права Пароли Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка предназначена для переноса пользователей между разными базами 1С. Позволяет выгрузить выбранных (или всех) пользователей базы-источника со всеми настройками, включая разделение данных, в файл. И с помощью этой же обработки загрузить выгруженных пользователей из файла в базу-приёмник. Может быть полезна тем, кто хочет перенести пользователей между базами, у которых включено разделение данных.

1 стартмани

02.05.2024    678    5    METAL    2    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sergson1 15.11.11 10:30 Сейчас в теме
Очень необходимая вещь, для тех кто работает в больших организациях и не доверяет своим коллегам))
2. veforg 27 15.11.11 10:37 Сейчас в теме
Лучше использовать доменную авторизацию чем выдумывать свой велосипед.
ukkom; zekrus; alex_bob; левый слон; +4 Ответить
4. dka80 21 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 3968 18.11.11 03:47 Сейчас в теме
(5)
А для этого придумали switch user, run as different user, log off наконец. Все уж лучше, чем заставлять продавцов помнить по 5 паролей.

А кто мешает при авторизации 1С ввести тот же доменный пароль? И не помнить по 5?
21. Kaperang 99 18.11.11 07:51 Сейчас в теме
(17) Abadonna, ну как бы, если у всех учетных записей пользователя одинаковые пароли, это не есть гуд. Это азы информационной безопасности. А вообще, приходится, как правило, делать компромисс между требованиями безопасности и удобством работы пользователей.
23. Kaperang 99 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 645 15.11.11 13:05 Сейчас в теме
(0) "P.S. Дополнительно хотелось бы прикрутить проверку на несовпадение паролей пользователя Windows и пользователя базы 1С. К сожалению, мне не удалось найти способа сравнения данных паролей."

И, кажется, не найдешь. :)
1С хранит не сами пароли, а их хеш. Насчет Винды не уверен, но если и нее и 1С одинаковый алгоритм шифрования, то можно сравнивать хеши. Кстати, смену паролей я тоже делал, но немножко другими методами.
6. YuliaYVS 28 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 99 17.11.11 18:49 Сейчас в теме
(8)AAndryA, прошу прощения - мой недосмотр. Процедура выглядит так:
Процедура раПроверитьСрокПароля(Пользователь) Экспорт
	Если раПарольПросрочен(Пользователь) Тогда
		раСменитьПароль(Пользователь);
	КонецЕсли;
КонецПроцедуры
12. babylon_5 55 17.11.11 20:14 Сейчас в теме
Продолжаем...
/*********************
1) Ошибка при вызове метода контекста (ПолучитьОбщуюФорму)
НоваяФорма = ПолучитьОбщуюФорму("ВводПароля",,"Моя форма");

2) Ошибка при установке значения атрибута контекста (ПериодическаяСменаПароля)
обПользователь.ПериодическаяСменаПароля = ЗначениеДляПодстановки;
по причине:
Реквизит недоступен для группы
13. Kaperang 99 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 99 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 99 18.11.11 08:06 Сейчас в теме
(16) babylon_5, хорошее замечание. Надо будет воспроизвести на тестовой базе. Хотя для того, чтобы база запустилась в таком режиме, надо это прописать это в ее настройках (В окне списка баз - "Настройки баз" - "Используемые версии"). А это весьма редко используемая, на мой вгляд, настройка.
У нас был несколько иной вариант: изначально база была на 8.1, соответственно в коде стояло "V81.ComConnector".
При переходе на 8.2 этот кусок кода забыли поправить.
В итоге полмесяца система воспринимала любой введенный пользователем "от балды" пароль, как старый пароль системы.
Отрабатывала конструкция "Попытка-Исключение-КонецПопытки". Но база с ошибкой не вываливалась.
18. Abadonna 3968 18.11.11 04:07 Сейчас в теме
(0)
Ответственность за действия, совершенные под учетной записью пользователя, в том числе, и другими лицами, несет сам пользователь

Мне всегда было интересно: неужели найдется такой человек, который добровольно полезет в 1С под чужой учетно записью и будет там что-то делать?
А если он убежденный, целенаправленный вредитель, то, будь уверен, он найдет способ попасть в базу хоть по пять раз на дню пароль меняй!
ИМХО, опять "паранойя безопасности". И проггеры при деле :)))
20. Kaperang 99 18.11.11 07:47 Сейчас в теме
(18) Abadonna, реальный пример: у нас автоцентр. Есть станция СТО, где работают мастера-приемщики. И есть отдел запасных частей, где работают продавцы. Премию за проданную деталь получает тот, кто поставил ее в резерв под клиента. Соответственно, если есть право на корректировку резервов, возникает изкушение сбросить старый резерв, и зарезервировать деталь снова на того же клиента, но уже от своего имени. Ни у мастеров-приемщиков, ни у продавцов прав на снятие резервов нет. Но если как-бы вдруг, у кого-то из них оказался пароль от учетной записи пользователя, имеющего право на корректировку резервов....У нас такие ситуации были. Наказали обоих - и "злодея", и того, кто дал пароль от своей учетки.
24. Kaperang 99 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 99 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 99 10.04.12 09:22 Сейчас в теме
(30) Evgen2011, сложность и длина пароля настраивается средствами самой платформы. Конкретно: Конфигуратор - Администрирование - Параметры информационной базы. Там можно включить проверку сложности пароля и минимальную его длину. При установке нового пароля (неважно,интерактивно или программно), если он не удолетворяет заданным условиям, то платформа вызывает исключение. Проще говоря, вываливается сообщение об ошибке. У меня это обрабатывается конструкцией:

ТекПользователь.Пароль=ТекстПароля1;
				Попытка                  
					ТекПользователь.Записать();
					ОбъектПользователь.ДатаПоследнейСменыПароля = ТекущаяДата();
					ОбъектПользователь.Записать();
					ПарольЗаменен = истина;
				Исключение
					ТекстОшибки = ОписаниеОшибки();
					Место = Найти(ТекстОшибки,"Записать):");
					Длина = СтрДлина(ТекстОшибки);
					ТекстОшибки = Прав(ТекстОшибки,Длина - Место-10);
					Если ТекстОшибки = "Заданный пароль короче установленной минимальной длины" Тогда
						ТекстОшибки = ТекстОшибки +": "+ ПолучитьМинимальнуюДлинуПаролейПользователей()+" символов.";				
					КонецЕсли; 
					Если ТекстОшибки = "Заданный пароль не удовлетворяет требованиям сложности" Тогда
Показать
31. пользователь 01.03.12 20:18
Сообщение было скрыто модератором.
...
33. ak0710 163 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 785 05.09.16 11:18 Сейчас в теме
(37) tiniji, А что если поставить галку "Запрет на изменение пароля"? В форме редактирования пользователя есть код, который отвечает за доступность пароля, теоретически его можно подредактировать и дать возможность менять несмотря на значение этой галки.
39. user600441_sonic400 06.09.16 14:20 Сейчас в теме
может я что-то не правильно понял но я пытаюсь запустить ее из модуля упраляемого прложения в процедуре ПриНачалеРаботыСистемы()
раПроверитьСрокПароля(Пользователь);
КонецПроцедуры;
просто не видит ее может сможете подсказать в чем косяк?
40. Kaperang 99 06.09.16 19:41 Сейчас в теме
(39) user600441_sonic400, обработка писалась 5 лет назад под обычные формы. Без "допиллинга" на управляемых формах точно не взлетит. Могу навскидку предположить:. 1. У общего модуля, в котором размещена процедура раПроверитьСрокПароля не включено свойство "Сервер". 2. Перед процедурой есть директива прекомпилятору "Если Клиент"
41. Kaperang 99 06.09.16 19:47 Сейчас в теме
(39) user600441_sonic400, в 8.2 не так давно появились методы работы с md5-хешем. В частности, получение хэша текущего пароля. Их использование, думаю может помочь в сравнении старого и нового паролей. В таком случае можно будет избежать "костыля" с использованием v8.connector. На выходных попробую переделать механизм под новые технологии.
42. Kaperang 99 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, создал подобие "Потребовать смену пароля пользователя при входе". Большое спасибо.
Оставьте свое сообщение