簡體   English   中英

無論如何將帶有tcps的spring boot連接到數據庫?

[英]is there anyway to connect spring boot with tcps to database?

我正在使用帶有數據 JPA 的 oracle 數據庫 12c 和 spring boot 2.3。 我的目標是與錢包連接,將 TCPS 扔到數據庫中。 在我搜索時,網上沒有這方面的示例或指南。 任何人都可以解釋並展示一些例子嗎?

如何從 Java 連接到 Oracle?

通常,在 Java 世界中,最常用的驅動程序是THIN ,它是由 oracle 提供的純 Java驅動程序實現,它使用套接字進行連接。 還有其他選擇:

  1. JDBC-ODBC 橋(不再隨新 Java 分發)
  2. 本機 API 驅動程序(OCI 驅動程序適合此處),
  3. 網絡協議驅動程序
  4. 數據庫協議驅動程序(瘦驅動程序)

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

沒有其他選項可以從 java 連接到 oracle。

什么是甲骨文錢包?

簡而言之,只是oracle提供的一個選項,用於在某些客戶端(java、c#、oracle sql developer、agents等)想要建立與數據庫實例的連接時隱藏用戶和密碼。

這是 Spring Boot 的傳統連接示例,其中需要用戶和密碼:

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

有關更多詳細信息,請查看以下鏈接:

如何使用oracle錢包?

如果不需要用戶和密碼,有什么神奇之處? 當然沒有魔法。 與任何其他服務一樣,替代方案是文件。 因此,如果您查看以下鏈接,您會發現創建一些特殊文件的步驟很多,客戶端(java、c#、oracle sql 開發人員、代理等)應該使用用戶和密碼來代替這些文件

甲骨文錢包文件

如何使用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?

根據這個,我們可以THIN連接直接使用的tnsnames.ora通過其中包含的電子錢包文件到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 驅動程序

建議

如您所見,實現這種身份驗證需要很多瘋狂的步驟。 也不兼容 devops,因為需要手動或人工任務。 你可以使用 docker 來自動化。 反正這個實現是復雜而乏味的。

如果攻擊者能夠通過以下方式獲得您的用戶和密碼,為什么他無法訪問oracle錢包文件?

  • 非法直接訪問生產基礎設施允許他讀取服務器上的任何文件:application.yml、錢包文件等
  • 非法訪問您擁有憑據的源代碼(非常糟糕的主意)
  • 通過 Java 應用程序中的錯誤訪問服務器。

我建議使用經典方式:使用用戶和密碼進行精簡,但具有以下安全配置:

  • 使用環境變量在源代碼中隱藏憑據
  • 使用一些變量管理器
  • 只有數據庫管理員應該知道或訪問生產環境的數據庫憑據。
  • 生產數據庫不應該對外公開。 它必須在專用網絡中,並且特定的客戶端(spring boot 應用程序)應該能夠訪問它。
  • 為特定應用創建特定用戶。 該用戶能夠看到最少的一組對象(方案、表格、視圖等)
  • 不斷掃描您的源代碼和基礎架構以查找安全問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM