Имя: Пароль:
1C
 
Проблемы с доступом к AD из регламентного задания
0 1398
 
21.06.11
14:10
Запустили корпоративный портал и экспорт данных для него из ЗУП.

При обмене обновляю сведения об электронной  почте сотрудников (ну и заодно паре других реквизитов), которые получаю из ActiveDirectory. Так уж, как говориться, «построены бизнес-процессы», что эти сведения есть только в АД.

При запуске регламентного задания, на строке «RootDSE = ПолучитьCOMОбъект("LDAP://RootDSE");» - вылезает ошибка. Ошибка получения объекта COM: The specified domain either does not exist or could not be contacted. Функция ПолучитьCOMОбъект(), к слову, отрабатывает перед этим вполен безболезненно.

Причина – пользователь USER1CV8SERVER, под правами которого происходит «вся жизнь» на сервере приложений, не является пользователем домена и LDAP в упор не видит.

Очевидно, что можно во внерабочее время переустановить сервер приложений. Как-то объяснив необходимость этого коллеги сисадмину. ;-) Но, по очевидным причинам, делать это хотелось бы в самую последнюю очередь.

Могут ли коллеги подсказать какой-либо иной результативный выход из ситуации?
1 Defender aka LINN
 
21.06.11
14:13
(0) "Очевидно, что можно во внерабочее время переустановить сервер приложений" - можно. Еще можно в нерабочее время спать, пить, есть, танцевать румбу в серверной, водить хороводы вокруг здания. Для зачем его переустанавливать?
2 Лефмихалыч
 
21.06.11
14:13
(0) ну, проблема в том, что "пользователь USER1CV8SERVER, под правами которого происходит «вся жизнь» на сервере приложений, не является пользователем домена и LDAP в упор не видит". Надо, чтобы сервер предприятия работал под каким-то другим пользователем
3 Лефмихалыч
 
21.06.11
14:16
4 1398
 
21.06.11
14:26
(1) у меня выше опечатка. По безграмотности. Сервер предприятия, конечно же.

Переустановка - это единственное известный мне способ заменить пользователя. Единственный, по крайней мере до момента появления (3)
5 1398
 
21.06.11
14:29
(3) Респект
6 Лефмихалыч
 
21.06.11
14:31
(4) ну, что сказать, тебе мало способов известно
http://screencast.com/t/E5EIkmGbN
7 serg_sh75
 
21.06.11
14:32
(0)а что мешает подключиться а AD от учетки любого другого пользователя(при наличии прав у оного)?
8 serg_sh75
 
21.06.11
14:36
ob = ПолучитьCOMОбъект("LDAP:");
ob.OpenDSObject( ... , <UserName>, <Password>, ... )
9 Лефмихалыч
 
21.06.11
14:39
(7) ни чего, просто регламентное задание запускается сервером приложений от имени пользователя. Под которым запущена служба "Агент сервера", а у него прав нет
10 1398
 
21.06.11
14:42
Коллеги, спасибо огромное.
Вопрос был закрыт ещё в (3). А уж тем более после (6).
11 smaharbA
 
21.06.11
14:47
Так пойдет ?

Функция ПолучитьCOMОбъект(Путь="")
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Возврат Скрипт.Eval("this").GetObject(Путь);
КонецФункции    // Получить_COMОбъект(Путь="")
//*******************************************
Процедура Сформировать()
   Перем Пользователь,Пароль,Домен,Стр,Контроллер,Отбор;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Это=Скрипт.Eval("this");

   ТЗ=СоздатьОбъект("ТаблицаЗначений");

   Пользователь="администратор@avangard.karat-e.ru";
   Пароль="СуперПароль";

   ДСО=ПолучитьCOMОбъект("LDAP:");

   Корень=ДСО.OpenDSObject("LDAP://RootDSE", Пользователь, Пароль,1);
   ТекстЗапроса="<LDAP://"+Контроллер;
   Если ПустоеЗначение(Домен)=0 Тогда
       Провайдер="Provider=ADSDSOObject;User Id="+Пользователь+"@"+Домен+";Password="+Пароль;
       ТекстЗапроса=ТекстЗапроса+Стр+">";
   Иначе
       Провайдер="Provider=ADSDSOObject;";
       ТекстЗапроса=ТекстЗапроса+Корень.Get("defaultNamingContext")+">";
   КонецЕсли;

   //Отберем только тип пользователи и только начинается логин вин200 на букову G
   Маска="g*";
   Отбор=";(&(objectClass=User)(sAMAccountName=" + Маска + "));AdsPath;subTree";
   ТекстЗапроса=ТекстЗапроса+Отбор;

   Соединение = СоздатьОбъект("ADODB.Connection");
   Соединение.Open(Провайдер);
   Записи=Соединение.Execute(ТекстЗапроса);
   Пока Записи.EOF=0 Цикл
       Состояние(Записи.Fields(0).Value);
       НоваяСтрока=ТЗ.НоваяСтрока();

       ЗаписиОбъекта=Это.GetObject(Записи.Fields(0).Value);
       // Можно и так
       //ЗаписиОбъекта=Это.ПолучитьОбъект(Записи.Fields(0).Value);
       ЗаписиОбъекта.GetInfo();
       Пока 1=1 Цикл
           Попытка
               Поле=ЗаписиОбъекта.Next();
           Исключение
               Прервать;
           КонецПопытки;
           Колонка=СтрЗаменить(Поле.Name,"-","_");
           Если ТЗ.ВидимостьКолонки(Колонка)=-1 Тогда
               ТЗ.НоваяКолонка(Колонка);
           КонецЕсли;
           Попытка
               ТЗ.УстановитьЗначение(НоваяСтрока,Колонка,ЗаписиОбъекта.Get(Поле.Name));
           Исключение
               ТЗ.УстановитьЗначение(НоваяСтрока,Колонка,ОписаниеОшибки());
           КонецПопытки;
       КонецЦикла;
       Записи.MoveNext();
   КонецЦикла;
   ПерыеКолонки="name
   |displayName
   |sAMAccountName
   |userPrincipalName
   |telephoneNumber
   |mail";
   Стр="";
   Для Сч=1 По СтрКоличествоСтрок(ПерыеКолонки) Цикл
       Если ТЗ.ВидимостьКолонки(СтрПолучитьСтроку(ПерыеКолонки,Сч))>-1 Тогда
           Стр=Стр+СтрПолучитьСтроку(ПерыеКолонки,Сч)+",";
       КонецЕсли;
   КонецЦикла;
   ТЗ.Сортировать("name");
   ТЗ.ВидимостьКолонки(Стр,1,1);
   ТЗ.ВыбратьСтроку();
КонецПроцедуры
12 smaharbA
 
21.06.11
14:48
пока копипастил с терминал, в (8) уже
13 Лефмихалыч
 
21.06.11
14:49
(11) кредентиалы в коде зашивать - моветон
14 smaharbA
 
21.06.11
14:52
(13) ты думаешь, я своим кодом пользуюсь толком ?
все пишется в основном для мисты - я не программист
15 1398
 
21.06.11
14:55
(8), (11) Спасибо, но вот только работать не будет ;-). "Сходит под себя" при ПолучитьCOMОбъект(). Было проверено.

(13) +1, как говориться. Это помимо того, что пароли имеют "привычку" устаревать, пользователи увольнятся. А потом сиди и объясняй всем, "какого хрена" выгрузка на сайт перестала работать месяц тому назад...
16 smaharbA
 
21.06.11
15:04
(15) т.е. системные комы из сервера не доступны ?
а пароли, можно и передавать, а не тупо копипастить
17 smaharbA
 
21.06.11
15:05
в (18) и (13) ты получаешь не доступ к корню, а только ком объект, а уж после передачи имени и пароля - доступ
18 smaharbA
 
21.06.11
15:06
в (8) и (11)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn