如何解决Java应用连接Oracle云数据库Autonomous Database的权限问题_使用Cloud Wallet

老萱吖_5683

老萱吖_5683

2026-05-27

447人浏览

原创

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-api-doc-generator
java-api-doc-generator

分析 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 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

11417

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8522

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

7332

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1224

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

988

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1456

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

3009

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20251

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1315

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程