|
Не проходит синхронизация с ActiveDirectory | ☑ | ||
---|---|---|---|---|
0
PVS_Mtl
08.06.15
✎
09:33
|
Добрый день.
Из 1С 8.2 УПП (толстый клиент) провожу синхронизацию данных с ActiveDirectory по имени учетной записи, отделу, должности и т.п. и получаю ошибку на строке Пользователь.SetInfo(): Исключительная ситуация 0х8007001f Устройство не подключено к системе. Причем эта ошибка появляется как при работе из моей учетной записи с моей машины (я локальный админ, и ошибка объяснима), так и при запуске толстого клиента из администраторской учетной записи, с машины расположения AD. Из админской учетной записи вручную, используя интерфейс AD, записи правятся без проблем. Чтение атрибутов из 1С также происходит нормально. Подскажите, как избежать появления ошибки: функция ПолучитьМодифицироватьУчетнуюЗаписьAD(предИмяAD,текИмяAD,строка) //пробуем найти объект по пред имени и изменять его текст = "LDAP://CN="+предИмяAD+",CN=Users,DC=Metall1C,DC=local"; попытка Пользователь = ПолучитьCOMОбъект(текст) ; исключение текст = "LDAP://CN="+текИмяAD+",CN=Users,DC=Metall1C,DC=local"; попытка Пользователь = ПолучитьCOMОбъект(текст) ; исключение //создаем новый пользователь = создатьУчетнуюЗаписьAD(текИмяAD,строка.логин); конецПопытки; конецПопытки; сообщить(пользователь.name); Пользователь.Put("sAMAccountName", строка.имяAD); //СтрЗаменить(Имя," ","_"); Пользователь.Put("displayName", строка.сотрудник.наименование); Пользователь.Put("name", строка.имяAD); массивФИО = общегоназначения.ПолучитьМассивФИО(строка.сотрудник.наименование); Пользователь.Put("sn", массивФИО[0]); Пользователь.Put("givenName", массивФИО[1]); Пользователь.Put("initials", массивФИО[2]); Пользователь.Put("title", строка.сотрудник.текущаяДолжностьОрганизации.наименование); Пользователь.Put("department", строка.сотрудник.текущееПодразделениеОрганизации.наименование); Пользователь.Put("mail", строка.адресЭлектроннойПочты); Пользователь.Put("userPrincipalName", строка.адресЭлектроннойПочты); Пользователь.SetInfo(); Пользователь.AccountDisabled=найти(строка.имяAD, "переведен")<>0 или найти(строка.имяAD, "уволен")<>0; Пользователь.SetInfo(); возврат пользователь; конецФункции функция создатьУчетнуюЗаписьAD(имяAD, парольAD) экспорт Перем Пользователь,Пароль,Домен,Стр,Контроллер,Отбор,Подразделение,Группа; Корень=МС_РаботасAD.ПолучитьLDAPОбъект("LDAP://RootDSE",Пользователь,Пароль); контейнер = получитьCOMОбъект("LDAP://cn=Users,"+корень.Get("defaultNamingContext")); ПользовательAD = контейнер.Create("User", "cn=" + имяAD); ПользовательAD.Put("sAMAccountName", имяAD); ПользовательAD.SetInfo(); попытка ПользовательAD.SetPassword(парольAD); ПользовательAD.Put("PasswordExpirationDate",общегоназначения.ДобавитьИнтервал(текущаядата(),Перечисления.Периодичность.День,2)); Пользователь.SetInfo(); исключение Пользователь.SetInfo(); конецПопытки; //добавляем в группы // Группа.Add(Пользователь.ADSPath); возврат пользовательAD; конецФункции |
|||
1
PVS_Mtl
08.06.15
✎
09:56
|
Up
|
|||
2
vde69
08.06.15
✎
10:03
|
1. где выполняется код? клиент или сервер?
2. LDAP - требует прав... 3. может так лучше: http://catalog.mista.ru/public/22314/ |
|||
3
PVS_Mtl
08.06.15
✎
10:16
|
1. Код располагается в модуле менеджера регистра сведений. Вызывается при нажатии кнопки на панели формы РС. В перспективе - из регламентного задания. Клиент-сервер, клиент толстый, полагаю что код выполняется на клиенте. Поправьте, если ошибаюсь (как определить, выполняется код на сервере или клиенте - в стеке вызовов не отображается?).
2. Подскажите, а какие права нужны/как можно модифицировать код, чтобы все-таки запись происходила? Начальник отдела выступает за LDAP, и хотелось бы до конца "добить" именно этот вариант. Прав, под которыми вручную правятся записи в AD, недостаточно? 3. Спасибо. Если не удастся реализовать п.2, буду пробовать. |
|||
4
PVS_Mtl
08.06.15
✎
10:56
|
Подскажите, где и какие права нужно добавить, чтобы заработал вариант через LDAP? Up
|
|||
5
PVS_Mtl
08.06.15
✎
12:28
|
Вверх
|
|||
6
PVS_Mtl
08.06.15
✎
13:17
|
Up
|
|||
7
sdf
08.06.15
✎
14:21
|
(0)
попробуйте так (у меня работает) dso = ПолучитьCOMОбъект("LDAP:"); Пользователь = dso.OpenDSObject(ADsPath, User, Password, 1); //где ADsPath = текст = "LDAP://CN="+предИмяAD+",CN=Users,DC=Metall1C,DC=local" |
|||
8
PVS_Mtl
08.06.15
✎
15:21
|
(7) делаю так, со своей машины, из-под учетной записи своей (лок админа), пишу имя админа сервера AD и его пароль, на строке dso.OpenDSObject ошибка: неверное имя пользователя или пароль. Имя админа пишу и Домен\ИмяАдмина, и просто ИмяАдмина - не действует.
|
|||
9
PVS_Mtl
08.06.15
✎
15:22
|
точнее: имя пользователя или пароль не опознаны
|
|||
10
PVS_Mtl
09.06.15
✎
07:08
|
Подскажите, в чем может быть причина?
|
|||
11
vde69
09.06.15
✎
08:11
|
пароль и логин - это доменная учетка, не локальная а именно доменная!!! (имя домена в ней есть)
|
|||
12
PVS_Mtl
09.06.15
✎
09:34
|
(11) да, пишу с именем домена, ту, под которой захожу на сервер размещения AD (админскую доменную) - ошибка: имя пользователя или пароль не опознаны.
Если пишу свою учетку (также с именем домена), пароль и имя опознаны, но не хватает прав на setinfo() (я не админ). Есть подозрение, что админский пароль и имя не опознаны, т.к. в имени есть кириллические символы. Может такое быть? |
|||
13
PVS_Mtl
09.06.15
✎
12:12
|
Завели на сервере AD новую админскую учетку, в имени только латиница, дали необходимые права. Объект создается
Пользователь = dso.OpenDSObject(ADsPath, User, Password, 1); а Пользователь.SetInfo() не проходит - опять та же ошибка: Присоединенное к системе устройство не работает. |
|||
14
vde69
09.06.15
✎
12:15
|
(13) конфликт с чем-то, например пароль слишком простой :) или такой логин уже есть, или еще чего...
|
|||
15
PVS_Mtl
11.06.15
✎
12:30
|
ошибку получаю при "правке" своей учетной записи в AD (а точнее, при перезаписи указанных полей на те же самые значения, что у них и есть)
|
|||
16
PVS_Mtl
15.06.15
✎
09:28
|
Up
|
|||
17
PVS_Mtl
23.06.15
✎
09:11
|
Проблема решена. Если кому-то впоследствии понадобится:
1. оказалось, что ошибка возникает только при попытке редактировать некоторые атрибуты пользователя в AD (т.н. RDN) - такие, как name и/или cn. Если код по их установке закомментировать, ошибка исчезает. Их исправляем совсем другим методом - MoveHere. 2. Функция создания ком-объекта LDAP с возможностью авторизации необходима для работы функционала. Спасибо за участие. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |