Oracle DBMS_LDAP 대신 Java 프로 시저로 전환했습니다. 그것은 잘 작동하고 더 이상 SSL 문제 (그것을 확장하기위한 자바의 힘 옆에).
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)를 참조하십시오. 아마도 [Super User] (http://superuser.com/) 나 [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/)가 더 나은 곳이 될 것입니다. 또한 [Dev Ops에 관한 질문을 게시 할 곳은 어디입니까?] (http://meta.stackexchange.com/q/134306) – jww
존경하는 한, 전체 스토리는 LDAPS 사용에 관한 내용이므로 ** 프로그래밍 문제 **라고 생각합니다. ** PL/SQL ** 프로그래밍. 또한 자바 프로 시저를 사용하여 발견 한 대체 솔루션에 대해 물어 보았고 곧 내 대답을 올릴 것입니다. – ATK