【发布时间】:2011-02-02 04:24:58
【问题描述】:
我目前正在尝试通过 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 客户端/服务器错误)(并且绑定的结果代码是成功)...
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, 注释:为了执行此操作,必须在 >connection
如果我尝试使用我的凭据进行连接,这些凭据应该是有效的,因为我已使用它连接到域...我得到:
ORA-31202: DBMS_LDAP: LDAP 客户端/服务器错误 凭据无效
80090308:LdapErr:DSID-0C090334, 评论:AcceptSecurityContext 错误
有没有可能是 Active Directory 不允许像这些外部 LDAP 操作?
编辑 2
看看 C# 中的“结果”变量,我得到了“路径”属性的这个值:
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”会是什么?
【问题讨论】:
-
c#代码是在同一台机器上运行的吗?
-
没有。但是考虑到它们在同一个域上,这会有什么不同吗?
-
也可以,这取决于防火墙规则。你能从oracle主机直接telnet到389端口吗?
-
确切的错误是什么。在 LDAP 客户端/服务器错误后,我得到了更多信息。 ORA-31202:DBMS_LDAP:LDAP 客户端/服务器错误:无效的 DN 语法 OR ORA-31202:DBMS_LDAP:LDAP 客户端/服务器错误:无效凭据。 NDS 错误:OR ORA-31202:DBMS_LDAP:LDAP 客户端/服务器错误:身份验证不当。匿名简单绑定已禁用。
-
添加了有关我收到的错误的详细信息。 @Matthew Watson:我不熟悉 telnet,但看起来我可以正确连接和 ping 服务器。