|
Подключение к LDAP на сервере и на клиенте | ☑ | ||
---|---|---|---|---|
0
Halyavnik
02.12.13
✎
17:48
|
1С 8.2.19.76 Управляемое приложение, клиент-сервер, MS SQL.
Попытка получить данные с LDAP сервера. Тестовый компьютер и сервер приложений 1С входят в один домен, права пользователя: Domain Admin. Есть код, который работает на тонком клиенте, но не работает на сервере. Кто-нибудь с таким сталкивался? И, если сталкивался, то как боролся? [code] Попытка oConnect = ПолучитьCOMОбъект( "", "ADODB.Connection" ); oConnect.Provider = "ADSDSOObject"; oConnect.Properties( "User ID" ).Value = "DomainAdmin"; oConnect.Properties( "Password" ).Value = "DomainAdminPassword"; oConnect.Properties( "Encrypt Password").Value = True; oConnect.Open( "Active Directory Provider" ); Исключение СообщитьПользователю("Err: ADODB.Connection"+Символы.ПС+ОписаниеОшибки()); Возврат; КонецПопытки; Query1 = "SELECT * FROM 'LDAP://my.domain/OU=Users,DC=my,DC=domain' WHERE objectClass='user'"; Попытка RecordSet1 = oConnect.Execute( Query1 ); Пока Не RecordSet1.EOF Цикл obj = ПолучитьCOMОбъект( RecordSet1.Fields(0).Value ); СообщитьПользователю("Data: cn="+obj["cn"]); RecordSet1.MoveNext(); КонецЦикла; Исключение СообщитьПользователю("Err: obj.cn"+Символы.ПС+ОписаниеОшибки()); КонецПопытки; [/code] Ошибка на сервере возникает в момент выполнения строки obj = ПолучитьCOMОбъект( RecordSet1.Fields(0).Value ); |
|||
1
Halyavnik
03.12.13
✎
11:51
|
Странно... Не поверю, что никто с этим не работал.
|
|||
2
Mafoni
03.12.13
✎
12:03
|
отладку на сервер включаешь и смотришь чего у тя вот тут RecordSet1.Fields(0).Value - содержится !!
|
|||
3
Mafoni
03.12.13
✎
12:04
|
и заччем вот к этому RecordSet1.Fields(0).Value делать еще ПолучитьCOMОбъект ???
|
|||
4
Mafoni
03.12.13
✎
12:05
|
Вот так RecordSet1.Fields(0).Value.cn обратится разве нельзя к полю cn ?
|
|||
5
НеБорис Нуралиев
03.12.13
✎
12:09
|
(0) Код на сервере запускается от имени usr1c82. Возможно у него нет прав на чтение данных домена.
|
|||
6
Mafoni
03.12.13
✎
12:24
|
(5) Вас не смущает что выборка данных из LDAP сработала ? ибо ошибки вот тут не выдало RecordSet1 = oConnect.Execute( Query1 ); ???
|
|||
7
Halyavnik
03.12.13
✎
12:27
|
(5) Да, пользователь USR1CV82 - локальный, со всеми вытекающими. Но подключение к LDAP серверу осуществляется с учтеной записью администратора домена. Может, я чего-то не знаю, но мне кажется, что рыть надо где-то в другом месте.
(4) Наверное, можно. Это - первая попытка работы с LDAP. Был нагуглен пример, всё взято оттуда и адаптировано к потребностям. Спасибо за информацию, попробую так. (6) Есть предположение, что по каким-то причинам сервер приложений 1С не может создать нужный COM-объект (это явно видно из ошибки), но для понимания причины моих знаний не хватает. |
|||
8
Mafoni
03.12.13
✎
12:30
|
попробуй вот так - RecordSet1.Fields(0).Value.cn и если не затруднит сообщи результат.
|
|||
9
Halyavnik
03.12.13
✎
12:34
|
(4) Попробовал обратиться RecordSet1.Fields(0).Value.cn. Результат: нулевой.
а). RecordSet1.Fields(0).Value - строка. "LDAP://my.domain/CN=ФИО,OU=ИмяОУ,OU=Пользователи,DC=my,DC=domain" б). RecordSet1.Fields(0).Value.cn {(1)}: Значение не является значением объектного типа (cn) Что, в принципе, предсказуемо после а). |
|||
10
Mafoni
03.12.13
✎
12:42
|
попытка номер 2
поменяй сам запрос к LDAP на вот такой query = "SEL ECT ADsPath FR OM 'LDAP://DC ...... тут как у тя должно быть |
|||
11
Mafoni
03.12.13
✎
12:43
|
пруф линк - http://help1c.com/faq/view/972.html
|
|||
12
Mafoni
03.12.13
✎
12:44
|
и да как всегда - результат в студию :)
|
|||
13
Halyavnik
03.12.13
✎
12:55
|
(12) ИМХО, вряд ли поможет.
Заменена * на ADsPath На клиенте - ОК. На Сервере - ошибка. |
|||
14
Mafoni
03.12.13
✎
13:01
|
(13) тут трудно не согласиться
|
|||
15
Halyavnik
03.12.13
✎
13:08
|
Единственное предположение (немного сумасшедшее, но...), что (5) - всё-таки прав.
oConnect - создается подключение (да, здесь админ домена) А вот это мы получаем уже под локальным USR1CV82, который не имеет прав. obj = ПолучитьCOMОбъект( RecordSet1.Fields(0).Value ); В результате - ошибка. Проверить смогу только вечером, ибо придется перезапускать сервер приложений от другого пользователя, в рабочее время - таким не балуемся. Так что результат будет завтра. Спасибо за помощь. |
|||
16
Mafoni
03.12.13
✎
13:19
|
Отпишись о результатах как попробуешь.
|
|||
17
oleg_km
03.12.13
✎
13:32
|
(15) не обязательно перезапускать сервер под другим пользователем, можно наоборот, дать пользователю 1С права с AD хотя бы на чтение
|
|||
18
Halyavnik
03.12.13
✎
13:38
|
(17) Эмммм... подскажете, как? Имеется в виду, подсказать, где в AD указываются права подключения к LDAP-серверу.
|
|||
19
oleg_km
03.12.13
✎
13:53
|
(19) Права устанавливаются не на подключение. Права устанавливаются на объекты, по аналогии с файловой системой. Консоль открой администрирование пользователей и компьютеров. Можно права на конкретного пользователя установить, можно на целое подразделение. Но лучше сначала книжку почитатай, а то легко все сковырнуть
|
|||
20
Halyavnik
03.12.13
✎
14:46
|
(19) Что-то не то. В консоли "Active Directory - пользователи и компьютеры" ни в свойствах ОУ, ни в свойствах конечных объектов НЕТ даже закладки "Безопасность".
Подобная закладка была обнаружена в консоли "Редактирование ADSI" - но там и не даст выбрать локального пользователя (тем более, другого компьютера). Вставить локального пользователя сервера приложений 1С в группу AD, дабы получить хотя бы права "Прошедшие проверку" - опять же не удается. Боюсь, подобные манипуляции можно совершать только с пользователями AD. |
|||
21
НеБорис Нуралиев
03.12.13
✎
17:36
|
(20) Если есть домен, лучше юзера для 1С доменного делать.
Вы правы, локального юзера в доверенные домена не засунуть. По крайней мере я тоже не в курсе как это сделать. |
|||
22
oleg_km
03.12.13
✎
17:47
|
Тогда придется перезапустить от доменного. С правами только нужно все проверить
|
|||
23
Halyavnik
04.12.13
✎
11:21
|
Итак, результат.
Был создан доменный юзер с именем (не особо мудрствуя) USR1CV82. Этому пользователю были даны права на папку сервера 1С аналогичные правам локального пользователя (ибо сервер не сможет писать логи и не запустится). Никаких других действий с точки зрения прав не выполнялось. В свойствах службы (под чьим именем запускать) был указан свежесозданный пользователь. Результат - всё заработало. Дополнительно: Скорее всего, в силу тонкого клиента, выполнение одного и того же кода на сервере и на клиенте отличается раза в три (точные замеры не производились, т.к. не было такой цели), хотя ожидались примерно одинаковые показатели (напоминаю, что всё выполняется из одного сеанса Предприятия, на компьютере, являющемся исключительно сервером приложений 1С:Предприятия). ВотЪ, как-то так. |
|||
24
НеБорис Нуралиев
04.12.13
✎
11:37
|
(23) А где быстрее? На клиенте или сервере?
|
|||
25
Halyavnik
04.12.13
✎
13:39
|
(24) Простите, как-то упустил, что не указал. На сервере.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |