【发布时间】:2021-03-31 21:48:53
【问题描述】:
我正在尝试使用 PL/SQL 对在 Windows 服务器上的 Oracle 11g 上运行的应用程序在内部针对 SSL 安全 LDAP 服务器进行身份验证。我已将证书加载到钱包中并存储在 d:\wallets\ 中,并且可以验证它是否有效/加载到 oracle 钱包管理器中(ewallet.p12 使用我正确配置的密码打开)。但是,无论我做什么,我都无法使用 PL/SQL 函数让它工作。代码如下:
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 行
我被困在这一点上,我在网上找不到任何关于如何完成这项工作的参考资料。
【问题讨论】:
标签: windows oracle plsql oracle11g ldap