首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBC oracle wallet连接

JDBC oracle wallet连接
EN

Stack Overflow用户
提问于 2017-03-03 00:24:11
回答 3查看 6K关注 0票数 3

我在使用oracle wallet作为密码存储将我的java应用程序连接到oracle数据库时遇到了问题。

为了隔离这个问题,我创建了一个小的主类,如下所示:

代码语言:javascript
复制
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);
}

在c:\tns目录中,我有以下文件:

代码语言:javascript
复制
sqlnet.ora
tnsnames.ora

这是sqlnet.ora的列表

代码语言:javascript
复制
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)))

对于tnsname来说

代码语言:javascript
复制
...
XE2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

在c:\wallet2中有以下文件:

代码语言:javascript
复制
cwallet.sso
ewallet.p12

该文件以前是用orapki生成的,其中有名为XE2的条目和正确的凭据。当我运行代码时,我得到了以下异常

代码语言:javascript
复制
Could not open wallet. java.io.IOException: Could not open wallet. Check password

启用oracle跟踪后,我可以看到以下几行:

代码语言:javascript
复制
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]

代码语言:javascript
复制
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

有人能帮我吗?感谢您的阅读。r。

EN

回答 3

Stack Overflow用户

发布于 2018-09-07 12:44:47

这是一个非常古老的话题。-TNS_ADMIN应指向钱包位置( C:\wallet2 ) -in tnsnames.ora wallet_location is C:\wallet2,而不是您所拥有的c:/walet

票数 0
EN

Stack Overflow用户

发布于 2019-12-04 04:31:32

我认为你的ewallet.p12文件是受密码保护的。

您需要使用密码设置oracle.net.wallet_password属性:

代码语言:javascript
复制
System.setProperty("oracle.net.wallet_password", "PASSWORD");

如果指定了密码,则为p12文件返回the driver looks,否则将使用sso文件。

票数 0
EN

Stack Overflow用户

发布于 2018-02-10 01:51:08

SQLNET.AUTHENTICATION_SERVICES = (NTS)

这应该是TNS而不是NTS。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42560669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档