ORA-01017在Autonomous Database中主因是Wallet配置错误:①未设置TNS_ADMIN环境变量或JVM参数;②cwallet.sso权限不足或不在本地磁盘;③tnsnames.ora别名含下划线导致解析失败;④URL未启用SSL或未正确引用wallet路径。
java 应用连接 oracle autonomous database 时提示 ora-01017: invalid username/password; logon denied 或 ora-28759: failure to open file,基本不是密码错,而是 wallet 权限或路径配置不到位 —— cwallet.sso 文件没被正确加载,或 java 进程无权读取它。
确认 wallet 文件是否被 JVM 正确识别
Autonomous Database 强制要求使用 TLS 连接,而 Java 的 JDBC 驱动(ojdbc11.jar 或更高)依赖 sqlnet.ora 和 cwallet.sso 定位加密凭据。JVM 不会自动扫描任意目录,必须显式指定 TNS_ADMIN 环境变量或系统属性。
- 启动 Java 应用前,确保已设置
TNS_ADMIN=/path/to/your/wallet(Linux/macOS)或set TNS_ADMIN=C:\path\to\your\wallet(Windows) - 若无法改环境变量(如容器或云函数),改用 JVM 参数:
-Doracle.net.tns_admin=/path/to/wallet - 验证路径下至少存在
cwallet.sso和tnsnames.ora;sqlnet.ora中的WALLET_LOCATION值可忽略——JVM 只认TNS_ADMIN,不读该配置项 - 检查文件权限:
cwallet.sso必须对运行 Java 进程的用户可读(chmod 644 cwallet.sso),否则报ORA-28759
tnsnames.ora 中的连接别名不能带空格或特殊字符
Autonomous Database 下载的 tnsnames.ora 里默认连接串名(alias)常含下划线和数字,如 adb_medium 或 myadb_high。但部分旧版 JDBC 驱动或 Spring Boot 的 spring.datasource.url 解析器会把含下划线的 alias 当作非法标识符,导致连接失败。
- 打开
tnsnames.ora,找到类似adb_medium = (description=...的行,把 alias 改成纯字母,例如adbmedium - 确保 JDBC URL 中引用的是修改后的 alias:
jdbc:oracle:thin:@adbmedium,而非原始带下划线的名 - 不要删掉 alias 后面的等号和括号内容——那是完整的连接描述,驱动靠它解析 TLS 参数和主机端口
Java 应用中未启用 SSL 且未传入 wallet 密码
Wallet 文件本身是加密的,cwallet.sso 是安全单点登录格式,不需要密码;但 ewallet.p12(如果应用主动加载)需要密码。多数场景只用 cwallet.sso,但 JDBC 驱动仍需明确告知启用 SSL。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- URL 中必须包含
?TNS_ADMIN=/path/to/wallet(仅限 ojdbc11+)或通过TNS_ADMIN环境变量传递,不能只靠 classpath - 连接 URL 示例:
jdbc:oracle:thin:@adbmedium?TNS_ADMIN=/opt/oracle/wallet - 若用
OracleDataSource编程方式设置,需调用setConnectionProperties(props)并加入props.put("oracle.net.tns_admin", "/opt/oracle/wallet") - 避免手动调用
setPassword():Autonomous Database 的 wallet 不绑定数据库用户密码,密码仍需单独传入getConnection(user, pwd)
最容易被忽略的一点:wallet 文件必须和 Java 进程在同一个主机上,且路径不能是 NFS 或网络挂载卷——某些 Linux 内核版本对 cwallet.sso 的 mmap 行为在远程文件系统上会静默失败,现象就是连得上但认证始终被拒。本地磁盘 + 显式 TNS_ADMIN + 可读权限,这三者缺一不可。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










