使用PLSQL获取LDAP用户列表

时间:2010-11-08 12:36:31

标签: oracle plsql active-directory ldap

我们的数据库应用程序的一个新要求是将用户表的内容与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 个答案:

答案 0 :(得分:4)

我的脚本正常运行。范围设置使我无法查看所有数据。 DBMS_LDAP.SCOPE_SUBTREE

答案 1 :(得分:3)

勒内, 您可以通过Oracle的LDAP组件在Active目录中搜索所有已搜索过的内容。虽然我不是LDAP / AD的专家,但我相信您可能需要执行这些操作的权利,或者更好地获得具有权限的ID /密码(这样您可以将您的id / psw保留在系统之外并允许AD管理员支持的未启用的pswrd或pswrd。我知道我一直对AD有完全的查询访问权限,不确定这是我的设置方式还是开箱即用的功能。

但是看看@这个网站 http://www.oracle-base.com/articles/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);

答案 2 :(得分:1)

Active Directory有大约4个命名属性。

  • sAMAccountName(又名Pre-Windows2000名称)是一个20个左右的字符短名称,在每个域中必须是唯一的。
  • userPrinicipalName,通常是sAMAccountName@domain.name,但事实证明AD几乎可以兑换任何字符串。 (我在实验上知道这一点,因为我们曾经在运行的AD域中意外地重置了6000个这样的值中的2000个。
  • displayName,显示在ADUC中(dsa.msc,Active Directory用户和计算机)
  • DN的CN=部分。使用ADUC,CN通常是显示名称。但是,它也可以是LDAP名称中的任何合法内容。

那你要找哪个'名字'?基本上查询列表中的任何属性,看看你得到了什么。

至于查看其他对象,是的,您需要一个具有足够权限的帐户才能查看用户的这些属性。