私はOracle DBMS_LDAPではなくJavaプロシージャに切り替えました。それはうまく動作し、SSLの問題はなくなりました(拡張するためのJavaの力の横にあります)。
SET SERVEROUTPUT ON SIZE 5000;
CALL dbms_java.set_output(5000);
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED LDAP AS
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
/**
* Java LDAP Package by ATK, 9/9/2016
*/
class ldap {
public static int ldap_auth(String username, String my_password, String ldap_server) {
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldap_server); //example "ldap://ldap.yourcompany.com:636"
env.put(Context.SECURITY_PROTOCOL, "ssl");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=" + username + ",OU=users,DC=company,DC=com");
env.put(Context.SECURITY_CREDENTIALS, my_password);
try {
// Create initial context
DirContext ctx = new InitialDirContext(env);
System.out.println("Connection Successful.");
ctx.close();
return 0;
} catch (NamingException e) {
System.out.println("LDAP Connection: FAILED");
e.printStackTrace();
return -1;
}
}
};
--show errors java source ldap ; -- to check class compile
CREATE OR REPLACE FUNCTION ldap_auth (username in varchar2, my_password in varchar2, ldap_server in varchar2) RETURN NUMBER
AS LANGUAGE JAVA
NAME 'ldap.ldap_auth (java.lang.String, java.lang.String, java.lang.String) return int';
call dbms_java.grant_permission('MySchema', 'SYS:java.net.SocketPermission', 'ldap.companyDomain.com', 'resolve');
call dbms_java.grant_permission('MySchema', 'SYS:java.net.SocketPermission', 'ldapqa.companyDomain.com', 'resolve');
call dbms_java.grant_permission('MySchema', 'SYS:java.net.SocketPermission', 'ldapdev.companyDomain.com', 'resolve');
call dbms_java.grant_permission('MySchema', 'SYS:java.net.SocketPermission', '10.14.10.53:636', 'connect,resolve');
call dbms_java.grant_permission('MySchema', 'SYS:java.net.SocketPermission', '10.14.10.54:636', 'connect,resolve');
call dbms_java.grant_permission('MySchema', 'SYS:java.net.SocketPermission', '10.14.10.55:636', 'connect,resolve');
そして今、あなたがそれをテストすることができます。
SET SERVEROUTPUT ON SIZE 5000
CALL dbms_java.set_output(0);
declare
l_ret int ;
begin
l_ret := ldap_auth ('myUser', 'myPassword', 'ldap://lds.companyDomain.com:636');
DBMS_OUTPUT.put_line('Return = ' || l_ret);
end;
スタックオーバーフローは、プログラミングや開発の質問のためのサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。また、[Dev Opsについての質問はどこに投稿しますか?](http://meta.stackexchange.com/q/134306) – jww
敬意を表して、 ** PL/SQL **プログラミングで。また、私はJavaプロシージャを使用して見つけた代替ソリューションについて尋ねました。 – ATK