首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法将spring boot与tcps连接到数据库?

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

Stack Overflow用户
提问于 2020-11-04 16:38:44
回答 1查看 77关注 0票数 2

我使用的是oracle数据库12c和spring boot 2.3以及data JPA。我的目标是与钱包连接,将TCPS抛到数据库中。在我搜索的时候,网上没有这方面的例子或指南。有没有人能解释一下并展示一些例子?

EN

回答 1

Stack Overflow用户

发布于 2021-11-29 01:07:59

如何从Java连接到Oracle?

通常,在java世界中,最常用的驱动程序是THIN,它是由oracle提供的纯java驱动程序实现,它使用套接字进行连接。还有其他选项:

OCI

  • JDBC-ODBC桥(不再随新的Java)

  • Native-API驱动程序(OCI驱动程序适用于此处)、

  • Network-Protocol driver

  • Database-Protocol驱动程序(瘦驱动程序)

一起分发

来源:https://stackoverflow.com/a/21711330/3957754

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

什么是甲骨文钱包?

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

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

代码语言:javascript
复制
spring:
  datasource:
    url: jdbc:oracle:thin:@host:port:sid
    username: user
    password: pwd

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

如何使用甲骨文钱包?

如果不需要用户名和密码,有什么神奇之处呢?当然,世界上没有魔法。与任何其他服务一样,另一种选择是文件。因此,如果您查看以下链接,您会发现创建一些特殊文件的步骤很多,客户端(java、c#、oracle sql developer、代理等)应该使用这些文件来代替用户名和密码

如何使用oracle钱包文件?

在大量的演讲之后,我发现了这些链接:

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

代码语言:javascript
复制
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模板进行比较,我们可以看到,只需要在安全下使用MY_WALLET_DIRECTORY就可以完成的工作:

代码语言:javascript
复制
MYSID=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mydnshostname)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = MYSID)
    )
  ) 

另一个链接:

如何在java中使用tnsnames.ora?

根据this的说法,我们可以直接在连接上使用tnsnames.ora,将包含wallet文件的文件夹传递给TNS_ADMIN参数:

代码语言:javascript
复制
jdbc:oracle:thin:@wallet_dbname?TNS_ADMIN=/foo/bar/

或者更优雅的

代码语言:javascript
复制
jdbc:oracle:thin:@wallet_dbname?TNS_ADMIN=$ORACLE_HOME/network/admin

此配置需要额外的库18.3 JDBC drivers

建议

正如您所看到的,实现这种身份验证需要许多疯狂的步骤。也不兼容devops,因为需要手动或人工任务。您可以使用docker自动执行此操作。不管怎么说,这是一个复杂而乏味的实现。

如果攻击者能够通过以下方式获得您的用户名和密码,为什么他不能访问oracle wallet文件?

通过对生产基础架构的非法直接访问,

  • 可以读取服务器上的任何文件: application.yml、wallet文件、对您拥有凭据的源代码的etc
  • illegal访问(通过java application.

中的错误对服务器进行非常糟糕的idea)

  • access

我建议使用经典的方法:瘦用户和密码,但具有以下安全配置:

  • 使用environment variables在源代码中隐藏凭据
  • 使用某些variables manager
  • just数据库管理员应该知道或访问的生产environment.
  • production数据库的数据库凭据应该不会对外公开。它必须位于专用网络中,并且特定客户端(spring boot应用程序)应该能够访问它。
  • 为特定应用程序创建特定用户。此用户能够查看最小的对象集(方案、表、视图、etc)
  • constantly、扫描源代码和基础结构以查找安全问题。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64676604

复制
相关文章

相似问题

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