我嘗試使用PL/SQL在Windows服務器上的Oracle 11g上運行的應用程序在內部針對SSL安全的LDAP服務器進行身份驗證。我已將證書加載到錢包中並存儲在d:\ wallets \中,並且可以驗證它是否在oracle錢包管理器中有效/加載(ewallet.p12將打開,並顯示我配置正確的密碼)。但是,無論我做什麼,我都無法使用PL/SQL函數來工作。下面是代碼:Oracle PL/SQL LDAP - 無法打開錢包
create or replace FUNCTION ldap_auth(
p_username IN VARCHAR2,
p_password IN VARCHAR2
)
RETURN varchar2 IS
l_ldap_host VARCHAR2(256) := 'ldapserver.internal.net';
l_ldap_port number := 636;
l_dn VARCHAR2(512);
l_retval PLS_INTEGER;
l_session DBMS_LDAP.session;
l_wallet_loc varchar2(256) := 'file:D:\wallets';
l_wallet_pwd varchar2(256) := 'pa55w0rd';
l_wallet_ssl number := 3;
BEGIN
DBMS_LDAP.USE_EXCEPTION := TRUE;
l_dn := 'cn='||p_username||',ou=People,dc=internal,dc=net';
BEGIN
l_session := DBMS_LDAP.init(l_ldap_host, l_ldap_port);
EXCEPTION
when others then
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
RETURN 'exception1';
END;
BEGIN
l_retval := DBMS_LDAP.open_ssl (l_session, l_wallet_loc, l_wallet_pwd, l_wallet_ssl);
EXCEPTION
when others then
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
RETURN 'exception2';
END;
BEGIN
l_retval := DBMS_LDAP.simple_bind_s(l_session, l_dn, p_password);
EXCEPTION
when others then
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
RETURN 'exception3';
END;
return 'pass';
END;
而這裏發生了什麼,當我運行它:
select ldap_auth('userID','userPassword') as results1 from dual
ORA-20001:遇到一個錯誤 - -31202 -ERROR- ORA-31202:DBMS_LDAP:LDAP客戶端/服務器錯誤:無法打開錢包 ORA-06512:在「DBUSERNAME.LDAP_AUTH」,第33行
我被困在這一點上,我無法找到任何參考線上如何使這項工作。
哇,這比我本來希望得到的解決方案要好得多 - 我今天晚些時候會給出這個答案。謝謝! – kagaku
還有一件事,我希望你使用orapki實用工具正確創建錢包[鏈接到示例](https://docs.oracle.com/cd/E29542_01/core.1111/e10105/walletmgr.htm#ASADM10183) – n33l1x