簡體   English   中英

使用jdbc連接數據庫時的安全問題

[英]security issue in connecting to a database in using jdbc

我創建了一個使用jdbc連接sql數據庫的java應用程序。 它的擺動應用。 連接到數據庫的代碼位於項目的一個文件中。 sql server的用戶名和密碼在那里是硬編碼的。

我想要一個解決方案,以便我連接到服務器(網絡上有一台數據庫的計算機)而不直接在應用程序中寫入密碼,而應該從服務器上的某個文件讀取。如何做?

同樣,這里出現了一個安全問題,即我必須在應用程序中提供文件名。 由於可以輕松地反編譯jar文件以獲取源代碼,因此任何人都可以看到文件的名稱並訪問它。

如何解決這個安全問題?

我理解您的疑慮,但有沒有辦法實現想要什么。 如果應用程序必須與數據庫連接,則必須“知道”訪問憑據。

“混淆”技術(如“加密密碼並在運行中解密”或“從其他地方提取密碼”)只是將其他問題轉移到其他地方的姑息治療。

您應該考慮添加一個抽象層。 您的應用程序應該訪問僅提供應用程序所需的CRUD功能的遠程Web服務 ,並應用最小特權原則 現代客戶端 - 服務器體系結構的設計使得“富客戶端”(如Swing應用程序)不直接與DBMS交互。 是的,速度較慢,但​​更安全,可擴展。 此外,您的富客戶端變得“不那么豐富”(它沒有實現業務邏輯),因此,例如,如果您更改表,則無需更新它。

使用Web服務還可以強制執行復雜約束 例如,在線幫助台。 一個常見的規則是您無法在已關閉的票證上發布消息。 你如何在DBMS中強制執行? 如果我可以登錄到您的DBMS,我可以為closed屬性設置為1的故障單發布盡可能多的消息:除非某些DBMS中甚至不支持某些繁瑣的CHECK子句,否則不執行任何約束。

隱藏你的數據庫!

將REST視為Web服務SOAP的輕量級替代方案。 在Java中,您可以使用Jersey快速創建REST服務器和客戶端。

問題是憑證不應該在代碼中硬編碼。 對於Web服務憑據也是如此。

我建議要求用戶輸入用戶名密碼,一次(首次啟動時)或者甚至可以定期(比如每月)。 然后,您可以將憑據保存在用戶主目錄中, 設置權限,以便只有所有者才能訪問它們(讓操作系統關注安全性)。 大多數需要身份驗證的Web服務器都或多或少地沿着這些方向工作。

你說

我想要一個這樣的解決方案,以便我連接到服務器(網絡上的一台具有數據庫的計算機)而不直接在應用程序中寫入密碼,而應該從服務器上的某個文件讀取

希望你不是說服務器作為數據庫服務器,因為首先要從數據庫服務器訪問密碼,你需要在服務器端(部署應用程序)的地方訪問你需要pwd的數據庫服務器:)。理想情況下,你應該提供憑據在部署應用程序的屬性文件中。 這是它一般性的方式

關於安全性我可以想到的一種方法是,您可以編寫將在屬性文件中生成憑據的程序,並且還可以發送到db admin以在某個時間點更改憑據。

暫無
暫無

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

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