我目前正在嘗試通過Pl/Sql(Oracle)中的dbms_ldap API訪問Active Directory。麻煩的是,我無法連接我自己的用戶名和密碼或任何非法。Oracle和活動目錄:愛/恨關係
然而,在C#中我可以匿名使用此代碼連接:
DirectoryEntry ldap = new DirectoryEntry("LDAP://Hostname");
DirectorySearcher searcher = new DirectorySearcher(ldap);
searcher.Filter = "(SAMAccountName=username)";
SearchResult result = searcher.FindOne();
如果我試圖在甲骨文匿名連接,我只能得到錯誤(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 client/server error
00000000: LdapErr: DSID-0C090627, comment: In order to perform this operation a successful bind must be completed on the >connection
如果我嘗試使用我的憑據,這是應該是有效的,因爲我連連接與它的域...我得到:
ORA-31202: DBMS_LDAP: LDAP client/server error Invalid credentials
80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error
難道是可能的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
也許這些信息可以幫助我解決問題,不允許匿名連接。瞭解'路徑'的動機,'ldap_base','ldap_user'和'ldap_passwd'會是什麼?
c#代碼是否從相同的 機器運行? – 2010-03-30 06:00:13
不可以。但考慮到他們在同一個域上,會有什麼不同嗎? – ALOToverflow 2010-03-30 11:33:11
它可以做到,它取決於什麼防火牆規則。你能從oracle主機直接telnet到端口389嗎? – 2010-03-30 12:02:42