PL/SQLを使用してWindowsサーバー上のOracle 11gで実行されているアプリケーションのSSL保護されたLDAPサーバーに対して内部的に認証しようとしています。証明書をウォレットにロードしてd:\ wallets \に格納し、有効であることをoracle wallet manager(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クライアント/ server error:ウォレットを開くことができません ORA-06512: "DBUSERNAME.LDAP_AUTH"、行33
この時点で私は立ち往生していますが、この作業を行う方法に関するオンラインの参考資料は見つかりません。
これは私が解決策で期待していた以上のものです。今度はこのことを後で説明します。ありがとうございました! – kagaku
さらにもう1つのことは、orapkiユーティリティ(例:https://docs.oracle.com/cd/E29542_01/core.1111/e10105/walletmgr.htm#ASADM10183)を使用してウォレットを正しく作成したことを願っています。 – n33l1x