Oracle自治数据库(ADB)强制SSL连接且仅支持Wallet认证:JDBC URL须用tcps协议、2484端口及完整DESCRIPTION语法,不带用户名密码;必须通过-Doracle.net.wallet_location指定绝对路径指向含cwallet.sso的Wallet目录,Linux/macOS下cwallet.sso权限需为600,驱动自动识别Wallet内凭证。
oracle自治数据库(adb)强制要求ssl连接,且只接受wallet方式认证——jdbc url里不能带用户名密码,也不能用javax.net.ssl.*参数加载jks。这是硬性限制,不是配置选项。
Wallet路径必须是绝对路径且权限严格
自治数据库下发的Wallet压缩包解压后,目录里必须包含cwallet.sso和ewallet.p12(部分版本可能只有前者)。JDBC驱动只认这个目录,不是文件;且cwallet.sso在Linux/macOS下权限不能高于600:
-
chmod 600 /path/to/wallet/cwallet.sso(否则报ORA-28860: SSL/TLS error) - 路径必须绝对——Spring Boot里用
file:/app/config/wallet/,别写./wallet或classpath:wallet/ - Docker容器中注意挂载路径映射是否真实存在,
ls -l /wallet/cwallet.sso要能看见且可读
jdbc url必须用tcps协议+2484端口+完整DESCRIPTION
自治数据库不开放1521端口,只走tcps协议和默认端口2484。URL格式不能简化,必须展开为标准Oracle Net语法:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=adb.region.oraclecloud.com)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=dbname_high.adb.oraclecloud.com)))
-
HOST和SERVICE_NAME必须从ADB控制台“连接信息”页复制,大小写敏感,带.adb.oraclecloud.com后缀 - 不能省略
CONNECT_DATA块,也不能把SERVICE_NAME换成SID - URL里不出现用户名、密码、
?wallet_location=等参数——这些由JVM系统属性或数据源配置接管
OracleDriver必须显式设置wallet_location系统属性
ojdbc8.jar(19c+推荐用ojdbc11)会自动查找oracle.net.wallet_location系统属性,而不是靠JDBC URL传参。启动时必须加:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
-Doracle.net.wallet_location=/absolute/path/to/wallet/dir
- 这个值是目录路径,不是
cwallet.sso文件路径 - 不能通过
System.setProperty()在代码里动态设——驱动在DriverManager.getConnection()前就初始化了 - Spring Boot应用应在
application.properties里配spring.datasource.hikari.data-source-properties.oracle.net.wallet_location=/path,或启动脚本里加-D - 如果同时设置了
javax.net.ssl.trustStore,驱动会直接忽略wallet并报ORA-28860
连接时不再需要用户名密码参数
Wallet里已预置了用户凭证(如ADMIN),JDBC连接时getConnection(url, props)的props里不要设user和password,否则会覆盖Wallet行为并失败:
- 正确写法:
DriverManager.getConnection(url, new Properties()) - 错误写法:
props.setProperty("user", "ADMIN"); props.setProperty("password", "...") - 若用HikariCP,确保
username和password配置项为空或删掉,否则连接池初始化直接报ORA-01017: invalid username/password - Wallet里没存对的用户?用
mkstore -wrl /path/to/wallet -listCredential检查,再用-createCredential补全
最容易被忽略的是:自治数据库的Wallet不支持客户端证书双向认证(SSL_CLIENT_AUTHENTICATION=TRUE),所以服务端配置里别开这个开关;另外,JDK 17+默认禁用TLSv1.1及以下,但Wallet本身不控制协议版本——只要ojdbc8+和数据库端协商出TLSv1.2即可,无需额外设oracle.net.ssl_version。

















