有没有办法将 spring boot 与 tcps 连接到数据库?

2024-04-26

我正在使用 Oracle 数据库 12c 和带有数据 JPA 的 Spring Boot 2.3。我的目标是连接钱包并将 TCPS 发送到数据库。当我搜索时,网上没有这方面的示例或指南。任何人都可以解释并举一些例子吗?


如何从 Java 连接到 Oracle?

通常,在java世界中,最常用的驱动程序是THIN这是一个纯javaoracle提供的驱动实现,使用sockets到连接。还有其他选择:

  1. JDBC-ODBC 桥(不再随新 Java 一起分发)
  2. 本机 API 驱动程序(OCI 驱动程序适合此处),
  3. 网络协议驱动程序
  4. 数据库协议驱动程序(瘦驱动程序)

Source: https://stackoverflow.com/a/21711330/3957754 https://stackoverflow.com/a/21711330/3957754

没有其他选项可以从 java 连接到 oracle。

什么是甲骨文钱包?

简而言之,只是oracle提供的一个选项hide当某些客户端(java、c#、oracle sql Developer、代理等)想要建立与数据库实例的连接时的用户和密码。

下面是 Spring Boot 的传统连接示例,其中需要用户名和密码:

spring:
  datasource:
    url: jdbc:oracle:thin:@host:port:sid
    username: user
    password: pwd

有关更多详细信息,请查看以下链接:

  • https://docs.oracle.com/cd/E92519_02/pt856pbr3/eng/pt/tsvt/concept_UnderstandingOracleWallet.html?pli=ul_d96e224_tsvt https://docs.oracle.com/cd/E92519_02/pt856pbr3/eng/pt/tsvt/concept_UnderstandingOracleWallet.html?pli=ul_d96e224_tsvt
  • https://www.appservgrid.com/documentation111/docs/rdbms12cr1/DBIMI/to_dbimi10236_d209.htm#DBIMI10236 https://www.appservgrid.com/documentation111/docs/rdbms12cr1/DBIMI/to_dbimi10236_d209.htm#DBIMI10236
  • https://www.microfocus.com/documentation/dataexpress/WS24/Help/GUID-CB6FAEE3-6570-4A14-8A61-885F3F578C4B.html https://www.microfocus.com/documentation/dataexpress/WS24/Help/GUID-CB6FAEE3-6570-4A14-8A61-885F3F578C4B.html
  • https://o7planning.org/10495/oracle-wallet https://o7planning.org/10495/oracle-wallet

如何使用甲骨文钱包?

如果不需要用户名和密码,那有什么魔力呢?当然,没有魔法。与任何其他服务一样,替代方案是文件。因此,如果您查看以下链接,您会发现有很多步骤来创建一些特殊文件客户端(java、c#、oracle sql Developer、代理等)应该使用用户名和密码:

  • https://www.jetbrains.com/help/datagrip/connect-to-oracle-cloud-by-using-wallets.html https://www.jetbrains.com/help/datagrip/connect-to-oracle-cloud-by-using-wallets.html
  • https://sumanruet.wordpress.com/2015/11/22/how-to-use-oracle-wallet/ https://sumanruet.wordpress.com/2015/11/22/how-to-use-oracle-wallet/
  • https://helpcenter.netwrix.com/NA/Configure_IT_Infrastruct/Oracle/Configure_Oracle_Create_Wallet.html https://helpcenter.netwrix.com/NA/Configure_IT_Infrastructure/Oracle/Configure_Oracle_Create_Wallet.html
  • http://www.dba-oracle.com/t_wallet_manager.htm http://www.dba-oracle.com/t_wallet_manager.htm
  • https://community.appdynamics.com/t5/Knowledge-Base/How-do-I-configure-Oracle-Wallet-authentication-for-database/ta-p/37633 https://community.appdynamics.com/t5/Knowledge-Base/How-do-I-configure-Oracle-Wallet-authentication-for-database/ta-p/37633

如何使用oracle钱包文件?

经过大量讲座后,我找到了这些链接:

  • http://oracle.ninja/using-one-client-with-multiple-oracle-wallets/ http://oracle.ninja/using-one-client-with-multiple-oracle-wallets/
  • https://babumani.blogspot.com/2020/07/configure-oracle-client-with-multiple.html https://babumani.blogspot.com/2020/07/configure-oracle-client-with-multiple.html
  • https://oraclesean.com/blog/managing-wallets-for-multiple-oracle-autonomous-databases https://oraclesean.com/blog/managing-wallets-for-multiple-oracle-autonomous-databases

与其他讲座一样,一种选择是使用名为的经典文件tnsnames.ora指定绝对路径我的钱包目录钱包文件:

MY_AWESOME_ID= (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)
(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=oracon_frankfurtdb.atp.oraclecloud.com))
(security=(ssl_server_cert_dn="CN=adwc.eucom...")
(MY_WALLET_DIRECTORY=D:\_Downloads_\Oracle_DB_Client_19.3\network\admin\FRANKFURT)(SSL_VERSION=1.2)(SSL_SERVER_DN_MATCH=yes)))

之前和官方的一些对比tnsnames.ora模板,我们可以看到我的钱包目录处于安全状态做这份工作 :

MYSID=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mydnshostname)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = MYSID)
    )
  ) 
  • http://www.dba-oracle.com/t_sample_tnsnames.ora.htm http://www.dba-oracle.com/t_sample_tnsnames.ora.htm
  • https://docs.oracle.com/cd/B19306_01/gateways.102/b16217/a_smpfil.htm https://docs.oracle.com/cd/B19306_01/gateways.102/b16217/a_smpfil.htm

另一个链接:

  • 设置 Oracle SSL 监听器 https://stackoverflow.com/questions/66588523/setup-oracle-ssl-listener

如何从java使用tnsnames.ora?

根据this https://stackoverflow.com/questions/54888853/how-to-configure-tnsnames-ora-file-with-spring-boot-application,我们可以直接使用tnsnames.oraTHIN连接将包含钱包文件的文件夹传递给TNS_管理员范围:

jdbc:oracle:thin:@wallet_dbname?TNS_ADMIN=/foo/bar/

或者更优雅地

jdbc:oracle:thin:@wallet_dbname?TNS_ADMIN=$ORACLE_HOME/network/admin

此配置需要额外的库18.3 JDBC驱动程序 https://www.oracle.com/database/technologies/appdev/jdbc-ucp-183-downloads.html.

Advice

正如您所看到的,实现这种身份验证需要很多疯狂的步骤。也不兼容 DevOps,因为需要手动或人工任务。你可以使用 docker 来自动化它。无论如何,这个实现是复杂而乏味的。

如果攻击者能够通过以下方式获取您的用户名和密码,为什么他无法访问预言机钱包文件?:

  • 非法直接访问生产基础设施允许他读取服务器上的任何文件:application.yml、钱包文件等
  • 非法访问您拥有凭据的源代码(非常糟糕的主意)
  • 通过 java 应用程序中的错误访问服务器。

我建议使用经典方式:使用用户名和密码进行精简但有了这些安全配置:

  • use 环境变量 https://stackoverflow.com/a/35535138/3957754在源代码中隐藏凭据
  • 使用一些变量管理器 https://stackoverflow.com/a/70106410/3957754
  • 只是数据库管理员应该知道或访问生产环境的数据库凭据。
  • 生产数据库不应该暴露在世人面前。它必须位于专用网络内,并且特定客户端(Spring Boot 应用程序)应该能够访问它。
  • 为特定应用程序创建特定用户。该用户能够看到最少的对象集(方案、表、视图等)
  • 不断扫描您的源代码和基础设施以发现安全问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法将 spring boot 与 tcps 连接到数据库? 的相关文章

  • Java程序在没有定义main方法的情况下如何运行?

    我正在浏览一些 Java 源代码并注意到main方法未定义 Java如何编译源码却无从下手 The main方法仅在 Java 虚拟机执行代码时使用 没有 a 则无法执行代码main方法 但仍然可以编译 编译代码时 通常在命令行上指定一组文
  • Servlet 包含 Tomcat 中的 HTTP 标头

    我有一个 servlet 它的请求调度程序包含另一个 servlet 包含的 servlet 设置了我想在包括小服务程序 因此 我在 include 方法中传入一个自定义 HTTPResponse 对象 该对象捕获来自 servlet 的所
  • Java 中修剪字符串的可能前缀

    I have String str 我想从中提取不包括可能的前缀的子字符串 abc 我想到的第一个解决方案是 if str startsWith abc return str substring abc length return str
  • Java心跳设计

    我需要在我的 Java 项目上实现一个心跳系统 3 5 个客户端和 1 个服务器 但我有一些问题 1 客户端需要有 2 个套接字吗 1 用于心跳 1 用于接收我的软件的正常消息 2 我看到在特定情况下 当客户端滞后时 客户端不会收到消息 如
  • emacs 的最佳 java 工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我收到异常: java.lang.IllegalStateException: getOutputStream() 已被调用用于此响应

    我想编写代码来下载保留在我的系统中的文件 这是我的代码 在控制器类中 我有以下映射 RequestMapping value processFile method RequestMethod POST public ResponseBody
  • Spring Batch - 读取多行日志消息

    我面临一个问题 在配置了 Spring 集成的 Spring Batch 应用程序中将多行日志消息读取为单个消息 该应用程序必须将多行日志消息 示例异常堆栈跟踪 读取为单个消息 稍后它必须处理并对消息进行分类以进一步建立索引 每行都由其时间
  • 何时使用环境变量与系统属性?

    我想知道以下哪种方法是首选方法 我们可以将事情设置为APP HOME path to file export in profile或类似的东西 并将其访问为System getenv APP HOME 或者 也可以使用属性作为 DAPP H
  • Swing 是否支持 Windows 7 风格的文件选择器?

    我刚刚添加了一个标准 打开文件 与我正在编写的一个小型桌面应用程序的对话 基于JFileChooserSwing 教程的入口 http download oracle com javase tutorial uiswing componen
  • Java俄罗斯方块旋转

    我知道这个问题已经被问了很多 但我想知道如何旋转俄罗斯方块 我已经做了一个又长又糟糕的解决方案 大约 170 行代码 但应该有更简单的方法来做到这一点 我的俄罗斯方块由 4 个块组成 它们都知道它们在矩阵中的位置 行和列 Matrix本身是
  • Android 是否可以获取用户和设备所在国家/地区的货币代码?

    是否可以获取用户和设备所在国家 地区的货币代码 我想将用户当前国家 地区的国家 地区代码设置为默认国家 地区 我们在 Android 中有解决方案吗 由于这段代码可能对您有帮助 public class CurrencyTest publi
  • 在 JSON 转换为 CSV 期间保持 JSON 键的顺序

    我正在使用此处提供的 JSON 库http www json org java index html http www json org java index html为了将 json 字符串转换为 CSV 但我遇到的问题是 转换后键的顺序
  • 如果Jetty的密钥库中有多个证书,它如何选择?

    我们的系统中有一些代码用于自动将自签名证书生成到密钥库中 然后由 Jetty 使用 如果给定主机的密钥已经存在 那么什么也不会发生 但如果它不存在 我们会生成一个新密钥 如下所示 public void generateKey String
  • 在其抽象超类中使用子类的泛型类型?

    在我的代码中有以下抽象超类 public abstract class AbstractClass
  • 当从搜索表单动态构建 WHERE 子句时,如何防止 SQL 注入?

    我知道在 Java 中保护 SQL 查询免受 SQL 注入的唯一真正正确的方法是使用准备好的语句 然而 这样的语句要求基本结构 选择的属性 连接的表 WHERE条件的结构 不会改变 我这里有一个 JSP 应用程序 其中包含一个带有大约十几个
  • Zuul -> Eureka Server,基本身份验证问题

    如果流程不包含基本授权 我就可以访问该服务 如果我使用基本授权 它会抛出 消息 访问此资源需要完全身份验证 以下是我的观察 在 ZuulFilter 的 run 方法中 我得到了值 request getHeader 授权 gt 基本 c2
  • 函数 isAssignableFrom 在服务器启动期间返回 false

    实施oauth2系统 我在使用以下代码时遇到一些问题 import org springframework security oauth2 provider endpoint FrameworkEndpointHandlerMapping
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • 编写代码以:启动 R 会话、运行 R 脚本、终止会话、重复

    我正在寻找一种简单的 设置后就忘记它 的方式 无论是作为终端中的单个参数字符串还是简单的 Java 程序 来自动执行以下操作 1 启动R会话 2 告诉 R 源 R 文件包含冗长的并行模拟代码 3 完成后终止R会话 4 开始一个新的R会话 5
  • “您的安全设置已阻止本地应用程序运行”Java 8

    我正在尝试在 Chrome 窗口中运行一个小小程序 但收到错误消息 我确实看到所有回复都告诉我将安全性更改为中级 但版本 8 中不存在该选项 到目前为止 几个小时的谷歌搜索和向同学寻求帮助没有带来任何进展 有人可以建议一下吗 Medium在

随机推荐

  • 无法加载 Spring ApplicationContext

    我正在为一个有点复杂的 spring 应用程序编写单元测试 我想加载 spring 上下文以便使用定义的 bean 我的 context xml 位于 src main resources context xml Maven 构建后 con
  • Keras模型拟合多项式

    我从四次多项式生成了一些数据 并希望在 Keras 中创建一个回归模型来拟合该多项式 问题是拟合后的预测似乎基本上是线性的 由于这是我第一次使用神经网络 我认为我犯了一个非常微不足道且愚蠢的错误 这是我的代码 model Sequentia
  • 基于程序描述的多线程推荐

    我想描述我的程序的一些细节 并获得有关最适用的最佳多线程模型的反馈 我现在花了很多时间阅读有关 ThreadPool Threads Producer Consumer 等的内容 但尚未得出可靠的结论 我有一个文件列表 格式相同 但内容不同
  • 将 best_in_place 与富文本编辑器(如 TinyMCE)一起使用

    我正在使用best in placegem 在 Rails 应用程序中进行就地编辑 但是 我需要对某些文本区域进行 X HTML 编辑 因此我需要一个富文本编辑器 TinyMCE 正在该网站的其他地方使用 然而 添加一个编辑器并不简单bes
  • 有没有办法扩展 PHP 中的特征?

    我想使用现有的功能trait并创建我自己的trait在此之上只是为了稍后将其应用到课堂上 我想延长Laravel SoftDeletes特质SaveWithHistory函数 因此它将创建一个记录的副本作为已删除的记录 我也想扩展它reco
  • 我无法通过引用捕获传递 lambda

    以下代码失败并出现此错误 E0413 不存在从 lambda float int i gt float 到 float int i 的合适转换函数 int test float f int i int i gt float return t
  • 使用 Asp.net/C# 使用 USB 令牌对文本文件进行数字签名?

    我有一个 USB 令牌 Epass Capricorn 我的要求是使用它来签署文本 平面文件 PS 我相信我必须从代 码中获取 START SIGNATURE START CERTIFICATE 和 SIGNER VERSION 数据并附加
  • 模拟器卡在从 10.0.2.2:8081 加载时,有什么问题吗?

    I am working on a react native project and I run it on emulator android AVD manager 我跑了adb 反向 tcp 8081 tcp 8081在 cmd 但我的
  • Visual Studio Code 中的“Markdown 片段链接导航”是什么?

    Visual Studio Code 2017 年 2 月 版本 1 10 发行说明描述了他们所谓的 Markdown 片段链接导航 这是描述 包含片段的 Markdown 文件的链接现在将尝试打开相应标题处的文件 Section head
  • Bootstrap 4 导航栏折叠菜单右对齐

    我正在使用 Bootstrap 4 我试图通过单击折叠按钮在右侧而不是左侧打开来弹出菜单 我尝试在 ul 元素上使用 ml auto 当导航栏未折叠时 导航栏项目正确位于右侧 当它折叠时 按钮正确地位于右侧 但菜单在左侧弹出 我也尝试过将
  • 一般:如何更改 Android 核心 API 类?

    这只是一个一般性问题 供我参考 我知道如何创建标准的 Android 应用程序 但我想知道 这怎么可能 人们如何增强 Android 核心功能并深入挖掘系统 例如 假设我想调整下载管理器 http developer android com
  • Laravel 通知监听器在实现队列时没有用

    Laravel 版本 5 5 PHP 版本 7 1 根据文档https laravel com docs 5 5 notifications https laravel com docs 5 5 notifications notifica
  • android 获取设备整体音频输出(PCM)

    有什么方法可以拦截或读取 Android 设备中的音频输出吗 我需要从 myActivity 内部读取 PCM 中的整个音频输出 包括后台的媒体播放器应用程序 通话中的语音 myActivity 内的 MediaPlayer 实例等 以及扬
  • Android SDK 工具 Rev.17 - onClick - 未找到相应的方法处理程序

    我将 Android SDK 工具更新到修订版 17 打开 Eclipse 后 我在 问题 视图中发现了更新之前不存在的新错误列表 这些错误出现在 XML 布局文件中 我在其中定义了按钮的 onClick 属性 鼠标悬停时错误消息示例 未找
  • 将 localStorage 数据设置为只读

    我正在开发 AngularJs 应用程序 我将数据存储在 localStorage 中 localStorageService set selectedUserCategory Circle 现在当我看到浏览器的 localStorage
  • Neo4j.rb 创建独特的关系

    这是我的 Neo4j 活动节点 class User include Neo4j ActiveNode has many out following type following model class User end john User
  • 将图像从 CV_64F 转换为 CV_8U

    我想转换类型的图像CV 64FC1 to CV 8UC1在 Python 中使用 OpenCV 在 C 中 使用convertTo函数 我们可以使用以下代码片段轻松转换图像类型 image convertTo image CV 8UC1 我
  • 如何获取 CakePHP 3.0 中最后一个插入 ID?

    使用 CakePHP 3 0 beta 似乎是一个简单的问题 但我搜索了文档但找不到任何东西 使用 this gt Model gt save 插入新记录后 我想获取新创建记录的 auto increment 主键 ID 使用 Cake 2
  • 使用 ALT+TAB 切换程序/窗口或单击任务栏时不会触发 VisibilityChange 事件

    问题在于事件 visibilitychange 的行为 已触发 当我切换到浏览器窗口内的不同选项卡时 当我单击浏览器窗口的最小化 恢复按钮时 还行吧 它没有被触发 当我使用 ALT TAB 切换到不同的窗口 程序时 当我切换到不同的窗口 程
  • 有没有办法将 spring boot 与 tcps 连接到数据库?

    我正在使用 Oracle 数据库 12c 和带有数据 JPA 的 Spring Boot 2 3 我的目标是连接钱包并将 TCPS 发送到数据库 当我搜索时 网上没有这方面的示例或指南 任何人都可以解释并举一些例子吗 如何从 Java 连接