2017-03-02 2 views
2

oracle 지갑을 암호 저장소로 사용하여 Java 응용 프로그램을 Oracle 데이터베이스에 연결하는 중 문제가 있습니다.JDBC oracle wallet connection

나는 다음과 같은 작은 Main 클래스 만든 문제를 분리하려면 : 디렉토리 C에서

public static void main(String[] args) { 
Connection conn; 
try { 
Class.forName("oracle.jdbc.driver.OracleDriver"); 
System.setProperty("oracle.net.tns_admin", "c:\\tns"); 
OracleDataSource ds = new OracleDataSource(); 
Properties props = new Properties(); 
System.setProperty("oracle.net.wallet_location", "c:/wallet2"); 

ds.setConnectionProperties(props); 
ds.setURL("jdbc:oracle:thin:/@XE2"); 
Provider p; 
p = new OraclePKIProvider(); 
Security.insertProviderAt(p, 3); 
conn = ds.getConnection(); 

} catch (SQLException ex) { 
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex); 

} catch (ClassNotFoundException ex) { 
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex); 
} 

: 나는 다음과 같은 파일을했습니다 \ TNS을 :

sqlnet.ora 
tnsnames.ora 

이에 대한 목록입니다 SQLNET.ORA

SQLNET.AUTHENTICATION_SERVICES = (NTS) 
names.directory_path = TNSNAMES 
SQLNET.WALLET_OVERRIDE = TRUE 
#WALLET_LOCATION = (SOURCE=(METHOD=FILE)METHOD_DATA=(DIRECTORY=c:\wallet)) 
WALLET_LOCATION = (SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=c:/wallet))) 

그 TNSNAMES에 대한

C에서
... 
XE2 = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = XE) 
    ) 
) 

: \에 다음 파일이 있습니다 wallet2 :

cwallet.sso 
ewallet.p12 

파일이 이전에 orapki으로 생성 된 올바른 자격 증명으로 XE2라는 이름의 내 항목이가.

mar 02, 2017 3:57:00 PM oracle.jdbc.driver.DatabaseError findMessage 
TRACE_30:   Enter: "ORA-17168", java.io.IOException: Could not open wallet. java.io.IOException: Could not open wallet. Check password 
mar 02, 2017 3:57:00 PM oracle.jdbc.driver.Message11 msg 
TRACE_30: 72B6CBCC Enter: "ORA-17168", java.io.IOException: Could not open wallet. java.io.IOException: Could not open wallet. Check password 
mar 02, 2017 3:57:00 PM oracle.jdbc.driver.Message11 msg 
TRACE_30: 72B6CBCC Exit [0.066509ms] 

mar 02, 2017 3:57:00 PM oracle.jdbc.driver.PhysicalConnection getSecretStoreCredentials 
GRAVE:   Throwing SQLException: 168java.io.IOException: Could not open wallet. java.io.IOException: Could not open wallet. Check password 

누구든지 나를 도울 수 있습니다 : 나는 코드를 실행하면 나는 다음과 같은 예외

Could not open wallet. java.io.IOException: Could not open wallet. Check password 

Oracle 추적을 가능하게 나는이 선을 볼 수 있습니다를 얻을? 읽어 주셔서 감사합니다. r.

+0

ORA-17168이 (가) 에 Secret Store에 문제가 발생 했으므로 지갑 위치 문제와 유사합니다. 지갑 위치에 열려있는 지갑 (cwallet.sso)이 있는지 확인하고이 지갑에 mkstore 유틸리티를 사용하여 올바른 자격 증명이 포함되어 있는지 확인하십시오. 올바른 위치를 가리키고 있는지 확인하십시오. – Maverick

+0

경로가 정확하고 cwallet.sso가 있습니다. 또한 mkstore 유틸리티를 사용하여 keystore의 contets를 테스트하고 XE에 대한 항목이 있는지 확인합니다. –

답변

-1

의 SQLNET.AUTHENTICATION_SERVICES = (NTS)

그게 TNS 대신 TNS해야하지 ???