甲骨文&活动目录:爱/恨的关系

时间:2010-03-29 18:52:57

标签: c# oracle plsql ldap

我目前正在尝试通过Pl / Sql(Oracle)中的dbms_ldap API访问Active Directory。麻烦的是,我无法使用自己的用户名和密码连接或无关紧要。

但是,在C#中,我可以匿名连接此代码:

DirectoryEntry ldap = new DirectoryEntry("LDAP://Hostname");
DirectorySearcher searcher = new DirectorySearcher(ldap);
searcher.Filter = "(SAMAccountName=username)";
SearchResult result = searcher.FindOne();

如果我尝试在Oracle中匿名连接,我在尝试搜索时只会收到错误(ORA-31202:LDAP客户端/服务器错误)(并且绑定的结果代码是SUCCESS)...

my_session := dbms_ldap.init('HOST','389');
retval := dbms_ldap.simple_bind_s(my_session, '', '');
retval := dbms_ldap.search_s(my_session, ldap_base,  dbms_ldap.scope_subtree, 'objectclass=*', my_attrs, 0, my_message);

为什么匿名连接是C#工作但在Pl / Sql中不起作用?您还有其他想法通过Oracle连接到Active Directory吗?

帮我把他们团聚在一起。
谢谢。

编辑1
当我使用匿名凭据绑定时,我得到:

  

ORA-31202:DBMS_LDAP:LDAP客户端/服务器错误
  00000000:LdapErr:DSID-0C090627,   注释:为了执行此操作,必须在>连接

上完成成功绑定

如果我尝试连接我的凭据,假定有效,因为我已经连接到域了...我得到:

  

ORA-31202:DBMS_LDAP:LDAP客户端/服务器错误   凭据无效
  80090308:LdapErr:DSID-0C090334,   comment:AcceptSecurityContext错误

Active Directory是否可能不允许这些外部LDAP操作?

编辑2
看一下'result'变量,在C#中,我得到'Path'属性的这个值:
LDAP:// SERVER_OR_DOMAIN / CN = LAST_NAME \,FIRST_NAME,OU = OU1,OU = OU2,OU = OU3,OU = OU4,DC = SERVER_NAME,DC = EXT1,DC = EXT2

也许使用这些信息可以帮助我解决问题,AD可能不允许匿名连接。知道'路径'是什么,'ldap_base','ldap_user'和'ldap_passwd'会是什么?

1 个答案:

答案 0 :(得分:0)

在困难的一天刮了几个小时之后解决了这个问题。

默认情况下,AD不允许匿名访问。因此,我必须找到正确的'distinguishedName'才能获得访问权限(这是没有'LDAP:// SERVER_OR_DOMAIN /'的长字符串)。

如果您遇到'80090308:LdapErr:DSID-0C090334,请注释:AcceptSecurityContext错误'错误,您应该参考this主题或this服务器故障问题。

感谢您的帮助。