使用PLSQL获取LDAP用户列表

Ren*_*ene 5 oracle plsql ldap active-directory

我们的数据库应用程序的一个新要求是将用户表的内容与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';
Run Code Online (Sandbox Code Playgroud)

如果我已经知道其他人是谁,我似乎只能查询自己的属性或其他人的属性.

  • 如何获取用户名列表?
  • 这是否可以使用任何帐户或这是否需要具有适当权限的帐户?

Har*_*son 3

Rene,您可以通过 Oracle 的 LDAP 组件在 Active Directory 中进行所有搜索,您似乎已经接触过这一点。虽然我不是 LDAP/AD 方面的专家,但我相信您可能需要执行这些操作的权限,或者更好的是创建一个具有权限的 ID/密码(这样您就可以将您的 id/psw 排除在系统之外并允许未过期的 pswrd 或 AD 管理员支持的 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);
Run Code Online (Sandbox Code Playgroud)