我使用的是oracle数据库12c和spring boot 2.3以及data JPA。我的目标是与钱包连接,将TCPS抛到数据库中。在我搜索的时候,网上没有这方面的例子或指南。有没有人能解释一下并展示一些例子?
发布于 2021-11-29 01:07:59
如何从Java连接到Oracle?
通常,在java世界中,最常用的驱动程序是THIN,它是由oracle提供的纯java驱动程序实现,它使用套接字进行连接。还有其他选项:
OCI
一起分发
来源:https://stackoverflow.com/a/21711330/3957754
没有其他选项可以从java连接到oracle。
什么是甲骨文钱包?
简而言之,它只是一个选项,当一些客户端(java、c#、oracle sql developer、代理等)想要建立到数据库实例的连接时,oracle提供了一个选项来隐藏和隐藏用户和密码。
下面是spring boot的传统连接示例,其中需要用户和密码:
spring:
datasource:
url: jdbc:oracle:thin:@host:port:sid
username: user
password: pwd有关更多详细信息,请查看以下链接:
如何使用甲骨文钱包?
如果不需要用户名和密码,有什么神奇之处呢?当然,世界上没有魔法。与任何其他服务一样,另一种选择是文件。因此,如果您查看以下链接,您会发现创建一些特殊文件的步骤很多,客户端(java、c#、oracle sql developer、代理等)应该使用这些文件来代替用户名和密码

如何使用oracle钱包文件?
在大量的演讲之后,我发现了这些链接:
其中,与其他讲座一样,一种选择是使用名为tnsnames.ora的经典文件,指定钱包文件的绝对路径MY_WALLET_DIRECTORY:
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就可以完成的工作:
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参数:
jdbc:oracle:thin:@wallet_dbname?TNS_ADMIN=/foo/bar/或者更优雅的
jdbc:oracle:thin:@wallet_dbname?TNS_ADMIN=$ORACLE_HOME/network/admin此配置需要额外的库18.3 JDBC drivers。
建议
正如您所看到的,实现这种身份验证需要许多疯狂的步骤。也不兼容devops,因为需要手动或人工任务。您可以使用docker自动执行此操作。不管怎么说,这是一个复杂而乏味的实现。
如果攻击者能够通过以下方式获得您的用户名和密码,为什么他不能访问oracle wallet文件?
通过对生产基础架构的非法直接访问,
中的错误对服务器进行非常糟糕的idea)
我建议使用经典的方法:瘦用户和密码,但具有以下安全配置:
https://stackoverflow.com/questions/64676604
复制相似问题