Получить список пользователей LDAP с помощью PLSQL - PullRequest
5 голосов
/ 08 ноября 2010

Одним из новых требований для нашего приложения базы данных является синхронизация содержимого пользовательской таблицы с пользователями в Active Directory. Поэтому в основном мне нужно подключиться к серверу Active Directory и получить список имен пользователей из процедуры plsql.

На данный момент я достиг подключения к активному серверу каталогов, используя мои собственные учетные данные, и запросил некоторые атрибуты.

Пример:

ldap_password := '****';
ldap_user     := 'cn=me,OU=Users,OU=mygroup,DC=mytown,DC=mycompany,DC=com';
ldap_base     := 'OU=Users,OU=mygroup,DC=mytown,DC=mycompany,DC=com';
search_filter := '(&(objectClass=Person)!((sn=him)(cn=me)))';
res_attrs(1)  := 'displayName';
res_attrs(2)  := 'cn';
res_attrs(3)  := 'telephoneNumber';

Кажется, я могу запросить только свои или чужие атрибуты, если я уже знаю, кто этот кто-то еще.

  • Как получить список имен пользователей?
  • Возможно ли это с использованием любой учетной записи, или для этого требуется учетная запись с надлежащими привилегиями?

Ответы [ 3 ]

4 голосов
/ 09 ноября 2010

Мой скрипт работает. Настройка области действия помешала мне увидеть все данные. DBMS_LDAP.SCOPE_SUBTREE

3 голосов
/ 08 ноября 2010

Рене, Вы можете выполнять поиск в Active Directory с помощью компонентов Oracle LDAP, которые, как вам кажется, вы уже затронули. Хотя я не эксперт по LDAP / AD, я полагаю, что вам могут потребоваться права для выполнения этих действий или, что еще лучше, получить созданный ID / пароль, обладающий правами (таким образом вы можете сохранить свой id / psw вне системы и либо недействительный pswrd, либо pswrd, поддерживаемый администраторами AD. Я знаю, что у меня всегда был полный доступ к AD, но я не уверен, что именно так я настроен или готов к работе.

Но посмотрите на этот сайт http://www.oracle -base.com / статьи / 9i / LDAPFromPLSQL9i.php

как показано в статье, я бы порекомендовал восстановить ваш searchFilter (получайте больше, а затем уменьшайте его, пока он не будет соответствовать вашим потребностям)

l_attrs(1) := '*'; -- retrieve all attributes
l_retval :=
    DBMS_LDAP.search_s(ld       => l_session,
                       base     => l_ldap_base,
                       scope    => DBMS_LDAP.SCOPE_SUBTREE,
                       filter   => 'objectclass=*',
                       attrs    => l_attrs,
                       attronly => 0,
                       res      => l_message);
1 голос
/ 08 ноября 2010

Active Directory имеет около 4 атрибутов именования.

  • sAMAccountName (он же Pre-Windows2000 name) - это короткое имя из 20 символов, которое должно быть уникальным в каждом домене.
  • userPrinicipalName, обычно sAMAccountName@domain.name, но оказывается, что AD будет учитывать почти любую строку. (Я знаю это экспериментально, поскольку однажды мы случайно сбросили 2000 из 6000 таких значений в работающем домене AD.
  • displayName, то, что отображается в ADUC (dsa.msc, Active Directory - пользователи и компьютеры)
  • CN= часть DN. Используя ADUC, CN обычно является отображаемым именем. Однако это тоже может быть что угодно в имени LDAP.

Так какое «имя» вы ищете? В основном запросите любой из этих атрибутов в списке и посмотрите, что вы получите.

Что касается просмотра других объектов, да, вам потребуется учетная запись с достаточными правами для просмотра этих атрибутов для пользователей.

...