"Зачистка" 1С от пользователей с отключенной учетной записью Windows

01.05.16

Администрирование - Информационная безопасность

Задача: в справочнике пользователей вычислить по учетной записи windows уволенных (т.е. с отключенной учеткой), перенести таких пользователей в папку "Уволенные" (при отсутствии создать такую) а в карточке пользователя снять галку "Аутентификация windows".

Скачать файл

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

Наименование По подписке [?] Купить один файл
Уволенные Сотрудники с отключенной аутентификацией ОС
.erf 23,98Kb
28
28 Скачать (1 SM) Купить за 1 850 руб.

По запросу службы тех. поддержки, написал обработку для решения описанной выше задачи (в конфигурациях УТ10.3 и БП 2.0).

На Инфостарте уже есть обработки, работающие с информацией Active Directory, так что добавлю к ним и свою.

Для тех, кто решит ею воспользоваться, приведу краткое описание действий для работы с ней:

 

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

Домен

Обычно имя домена указывается через "\" перед Вашим логином при подключения к серверу терминалов по протоколу Remote Desktop Protocol (RDP).


2. Выводим информацию в отчет

отчет

 

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

отборы

      Представленная на рис. комбинация оставит выборку пользователей:

  • с отключенной учетной записью Windows
  • имеющих доступ в текущую базу данных
  • включенную аутентификацию операционной системы для входа в 1С). 

4. Выбираем действие над полученной выборкой пользователей

операции

 

5. Тут включается режим "паранойя")) .. поэтому еще раз укажем нужных пользователей или отметим всех

паранойя

 

6. Готово.  Для того чтобы получить новый набор данных нужно снять галочку "Уже рассчитаный набор данных".

 

 Теперь немного кода с комментариями. При выполнении команды "Сформировать" происходит следующее:

 1. Получаем по запросу LDAP список отключенных учетных записей.

Протокол LDAP (Lightweight Directory Access Protocol, упрощённый протокол для доступа к каталогу) служит для доступа к службам каталогов, в том числе Active Directory в Windows 2000/2003. Служба каталогов Active Directory является LDAP-совместимой реализацией службы каталогов Microsoft для операционных систем семейства Windows и хранит информацию о сетевых ресурсах - пользователях, компьютерах, файлах, папках и принтерах, а также информацию безопасности, касающуюся этих ресурсов.

Специальный объект RootDSE (Root Directory Service Entry) автоматически вернёт имя того домена, к которому принадлежит данный компьютер:
# получение имени домена, к которому принадлежит данный компьютер:
adsi = win32com.client.GetObject("LDAP://RootDSE")
domain = adsi.Get("defaultNamingContext")

 Для начала, создадим подключение в Active Directory

Функция СоздатьПодключениеКAD(ОписаниеОшибок = "")
	
	ПодключениеКAD = Неопределено;
	
	Попытка
		ПодключениеКAD = Новый COMОбъект("ADODB.Connection");
		ПодключениеКAD.Provider = "ADSDSOObject";
		ПодключениеКAD.cursorLocation = 3; //adUseClient
		ПодключениеКAD.Open("ADs Provider");
	Исключение
		ПодключениеКAD = Неопределено;
		ОписаниеОшибок = "Не удалось создать подключение к Active Directory!";
	КонецПопытки;
	
	Возврат ПодключениеКAD;
	
КонецФункции

затем получаем список учетных записей Windows. В массив Результат собираем значения ОписаниеОбъекта. Это структура со описанием свойств записи пользователя.  

Функция ПолучитьМассивСотрудниковAD() Экспорт
	
	Результат = Новый Массив;

	ИмяГруппыAD	  = "DC="+ДоменActiveDirectory;
	ПоляЗапроса	  = ПолучитьСоответствиеПолей();
	СтрокаПодключения = СтроковыеФункцииКлиентСервер_ПодставитьПараметрыВСтроку("<LDAP://%1>;(&(objectCategory=person)(objectClass=user));%2;subtree", ИмяГруппыAD, ПолучитьИменаПолей(ПоляЗапроса));
	
	rs = ПолучитьВыборкуLDAP(СтрокаПодключения);
	Сч = 0;
	
	Если ИСТИНА 
		 И НЕ rs = Неопределено
		 И rs.RecordCount > 0 
	Тогда
		Пока Не rs.EOF Цикл  		
			Если rs.Fields("givenName").Value = null Тогда 
				Попытка
					rs.MoveNext();
					Сч = Сч + 1;
					
				Исключение
					СтатусВыполнения = "Данные получены не полностью (" + Сч + " записей). Ограничьте размер выборки.";
					Прервать;
									
				КонецПопытки;
				
				Продолжить;
				
			КонецЕсли;
			
			ОписаниеОбъекта = Новый Структура("Идентификатор, Значения", "", Новый Структура());
			Результат.Добавить(ОписаниеОбъекта);
			
			ОписаниеОбъекта.Идентификатор = ПривестиМассивИДКСтроке(rs.Fields("objectGUID").Value);
						
			Для каждого ТекКлючЗначение Из ПоляЗапроса Цикл
				ОписаниеОбъекта.Значения.Вставить(ТекКлючЗначение.Значение, rs.Fields(ТекКлючЗначение.Ключ).Value);
				
			КонецЦикла;	
			
			Попытка
				rs.MoveNext();
				Сч = Сч + 1;
				
			Исключение
				СтатусВыполнения = "Данные получены не полностью (" + Сч + " записей). Ограничьте размер выборки.";
				Прервать;
								
			КонецПопытки;
			
		КонецЦикла;
	КонецЕсли;
	
	rs.Close();
	rs = Неопределено;
		
	Возврат Результат;
		
КонецФункции

Описание свойств записи пользователя задается набором полей в этой функции:

Функция ПолучитьСоответствиеПолей()
	
	Результат = Новый Соответствие;
	
	Результат.Вставить("ADsPath",                 "ПолноеИмя");
	Результат.Вставить("Name",                    "Наименование");
	Результат.Вставить("DisplayName",             "ОтображаемоеИмя");
	Результат.Вставить("Mail",                    "АдресЭлектроннойПочты");
	Результат.Вставить("sAMAccountName",          "ИмяАккаунта");
	Результат.Вставить("userAccountControl",      "ПараметрДоступа");
	Результат.Вставить("memberOf",                "СостоитВГруппах");
	Результат.Вставить("objectClass",             "КлассыОбъекта");
	Результат.Вставить("title",                   "Должность");
	Результат.Вставить("department",              "Департамент");
	Результат.Вставить("msExchShadowGivenName",   "Фамилия");
	Результат.Вставить("msExchShadowSn",          "ИмяОтчество");
	Результат.Вставить("givenName",         	  "Имя");
	Результат.Вставить("sAMAccountName",       	  "Логин");
	
	Результат.Вставить("objectGUID",          "Идентификатор"); 
		
	Возврат Результат;
		
КонецФункции

По значению в поле "ПараметрДоступа" будет определяться текущий статус учетной записи пользователя, который будет выводится в колонке "Отключенная учетная запись ОС". Расшифровка значений параметра задается в этой функции:

Функция ПолучитьПараметрыДоступа()
	
	Результат = Новый Соответствие;
	Результат.Вставить(512,       Истина);	//Enabled Account
	Результат.Вставить(514,       Ложь);	//Disabled Account
	Результат.Вставить(544,       Истина);	//Enabled, Password Not Required
	Результат.Вставить(546,       Ложь);	//Disabled, Password Not Required
	Результат.Вставить(66048,     Истина);	//Enabled, Password Doesn't Expire
	Результат.Вставить(66050,     Ложь);	//Disabled, Password Doesn't Expire
	Результат.Вставить(66080,     Истина);	//Enabled, Password Doesn't Expire & Not Required
	Результат.Вставить(66082,     Ложь);	//Disabled, Password Doesn't Expire & Not Required
	Результат.Вставить(262656,    Истина);	//Enabled, Smartcard Required
	Результат.Вставить(262658,    Ложь);	//Disabled, Smartcard Required
	Результат.Вставить(262688,    Истина);	//Enabled, Smartcard Required, Password Not Required
	Результат.Вставить(262690,    Ложь);	//Disabled, Smartcard Required, Password Not Required
	Результат.Вставить(328192,    Истина);	//Enabled, Smartcard Required, Password Doesn't Expire
	Результат.Вставить(328194,    Ложь);	//Disabled, Smartcard Required, Password Doesn't Expire
	Результат.Вставить(328224,    Истина);	//Enabled, SmРезультат.Вставить(artcard Required, Password Doesn't Expire & Not Required
	Результат.Вставить(328226,    Ложь);	//Disabled, Smartcard Required, Password Doesn't Expire & Not Required
	
	Возврат Результат;
		
КонецФункции

2. Получаем всех пользователей 1С.

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

4. Выводим информацию в отчет. Полученная таблица значений служит источником для набора данных СКД.

5. Далее уже работаем с данными через отчет. Реализованы следующие операции:

  • перемещение элемента справочника "Пользователи" в указанную группу
  • снятие/установка галочки "Аутентификация операционной системы" в карточке пользователя.

добавлено 04.05.2016

добавлена возможность сформировать отчет по справочнику "Пользователи" и пользователям информационной базы:
колонка "Есть пользователь БД" - указывает на существование пользователя БД.

доп отчет  

уволенные сотрудники учетная запись отключена Windows Active Directory

См. также

Информационная безопасность Системный администратор Программист Платные (руб)

AUTO VPN (portable) - автоматизация подключения пользователей к удаленному рабочему месту или сети посредством создания автоматического VPN (L2TP или L2TP/IPSEC и т.д.) подключения без ввода настроек пользователем (с возможностью скрытия этих настроек от пользователя). Программа автоматически выполняет подключение к VPN серверу и после успешного коннекта , если необходимо, подключение к серверу удаленных рабочих столов (RDP).

1200 руб.

24.03.2020    15377    25    32    

35

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

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

2400 руб.

29.08.2016    30060    9    1    

10

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

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

30.05.2024    6241    kamisov    17    

60

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

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    7375    PROSTO-1C    10    

39

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

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)<br> Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

1 стартмани

27.10.2023    2425    platonov.e    1    

23

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

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

5 стартмани

24.04.2023    6264    20    soulner    8    

32

Информационная безопасность Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    7294    50    Silenser    12    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mbgimpex 18.11.16 15:55 Сейчас в теме
Обработка переписана на СКД, в инструкции так и остались картинки от старых версий, и соответственно новой обработке не соответствует.
Но, главное в том, что НЕ РАБОТАЕТ. При формировании отчета сразу же валится с ошибкой

Ошибка выполнения отчета
по причине:
Ошибка исполнения отчета
по причине:
Ошибка инициализации
по причине:
Ошибка создания набора данных "НаборДанных1"
по причине:
Не найден внешний набор данных "ТЗ"
Прикрепленные файлы:
2. пользователь 13.10.17 13:34
Сообщение было скрыто модератором.
...
3. GKG 22 21.05.18 10:50 Сейчас в теме
У меня заработало после такой модификации в модуле

Функция ПолучитьМассивСотрудниковAD() Экспорт
		
	Результат = Новый Массив;

	//ИмяГруппыAD			= "DC="+ДоменActiveDirectory;	//было

	поз=Найти(ДоменActiveDirectory,",");                 //стало
	лев=сред(ДоменActiveDirectory,1,поз-1);
	прав=сред(ДоменActiveDirectory,поз+1);
	ИмяГруппыAD="DC="+лев+",DC="+прав;
Показать
Оставьте свое сообщение