2010-03-29 62 views
3

我目前正在嘗試通過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'會是什麼?

+0

c#代碼是否從相同的 機器運行? – 2010-03-30 06:00:13

+0

不可以。但考慮到他們在同一個域上,會有什麼不同嗎? – ALOToverflow 2010-03-30 11:33:11

+0

它可以做到,它取決於什麼防火牆規則。你能從oracle主機直接telnet到端口389嗎? – 2010-03-30 12:02:42

回答

0

辛苦的一天,我的頭撓了幾個小時後解決了這個問題。

默認情況下,AD不允許匿名訪問。因此,我必須找到正確的'distinguishedName'以獲得訪問權限(這是沒有'LDAP:// SERVER_OR_DOMAIN /'的長字符串)。

如果您遇到過'80090308:LdapErr:DSID-0C090334,請評論:AcceptSecurityContext錯誤'錯誤,您應該參考this線程或this serverfault問題。

感謝您的幫助。

+0

鏈接到oracle論壇已損壞 – 2011-07-26 16:44:19