2012-04-28 152 views
0

實際上從Java類型4 DB連接我連接到Oracle數據庫是這樣的:在java中加密數據庫用戶名和密碼?

在dbconnection.java我寫了下面:

Class.forName("oracle.jdbc.driver.OracleDriver"); 
    con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:database host name","database user name", "database user password"); 
    return con; 

有什麼方法我怎麼能寫這3個領域(數據庫主機,數據庫的用戶名,數據庫用戶口令)以加密的形式在java類dbconnection.java象下面這樣:

Class.forName("oracle.jdbc.driver.OracleDriver"); 
    con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:wrtwtr#$%$_rfwrw","regfwerfgwf", "%%5frfr^&%$%4"); 
    return con; 

和數據庫連接期間,這些加密字段瓦特病人進行解密,並會在實際名稱

連接到Oracle數據庫在隨後的servlet我打電話,如:

dbconnection db= new dbconnection(); 

任何幫助,請

+0

這個方向的一個簡單的第一步可能是將它們硬編碼到源代碼並將它們移動到外部文件中。 – Thilo 2012-04-28 08:08:08

+0

如果您問這個問題,您可能會遇到問題。如果您擔心最終用戶抓取您的數據庫配置,請製作一個API。否則,加密所有你想要的,但用戶可以通過嗅探來獲取數據。 – Corbin 2012-04-28 08:08:55

+0

@Thilo請你詳細說明這個概念,以便我可以知道如何轉移到外部文件? – saroj 2012-04-28 08:37:16

回答

1

您應該提供一種安全的方式來允許外部控制的應用程序(或應用程序實例)訪問您的數據庫,而不是試圖隱藏您的連接細節。

的API基本上是你的數據庫,你不擁有控制權的應用程序之間的中間層。例如,facebook不是允許直接訪問他們的數據庫,而是允許開發人員通過API訪問他們的數據。這意味着應用程序可以被認證(因此意味着他們可以負責),並且您可以明確地控制應用程序可以查看和不能查看和編輯的內容。基本上,通過一個API,你可以保護你的數據庫,同時跟蹤誰在做什麼(雖然保護方面通常是主要的)。

我必須說,有時候,如果你信任使用應用程序的人,不用擔心它。例如,如果你在一個有能力,善意的人的小公司工作,那麼允許應用程序直接連接到數據庫可能是安全的。

如果您要將程序發佈給公衆,或者一些您不完全信任的人,那麼無論採取何種預防措施,您都不應允許直接訪問。

假設您確實弄清楚如何加密您的憑證。在某些時候,您仍然必須建立連接。如果用戶抓取解密/連接代碼,建立連接,然後在其後面插入自己的代碼,現在會發生什麼?突然他可以訪問你的數據庫。使用API​​,最糟糕的情況是,他可以竊取API密鑰,並且具有有限的,可追蹤的,輕鬆可更換的訪問權限。此外,如果您允許訪問API,則只允許用戶執行您希望他們執行的操作。最糟糕的情況是,如果他確實知道如何直接使用API​​,他所能做的就是程序允許他做什麼。

+0

+1 corbin爲您有用的答案,但我應該使用哪個API?是的,如果有人可以知道如何直接使用API​​,那麼他可以通過進入我的數據庫來做任何事情,我該如何防止它?任何想法 – saroj 2012-04-28 09:38:45

+0

「我應該使用哪個API?」你做的那個。除非你連接的數據庫已經有一個應用程序運行,它提供了一個API(如果它是一個自定義模式,它不會)。 「如果有人能夠直接知道如何使用API​​,那麼他可以通過進入我的數據庫來做任何事情」。否。API提供有限的訪問權限。例如,StackOverflow API允許用戶使用他們的憑證進行連接,然後他們可以訪問關於近期帖子,聲譽等的各種信息。但是,stackoverflow API不允許在其他一些事情中發佈問題 – Corbin 2012-04-28 09:43:31

3

我不知道的任何方式做那。

但我也看不出有什麼這樣做會實現。當然,用戶名和密碼沒有清楚地顯示出來,但是一個能夠訪問這些加密字符串的壞人可以像你的程序那樣使用它們。

+0

確定stephen,但有人可以從加密的用戶和密碼知道真正的用戶名和密碼?當人們通過Java應用程序登錄時,如何保護我的數據庫? – saroj 2012-04-28 09:36:51

+0

我無法理解「但一個能夠訪問這些加密字符串的壞人可以像你的程序一樣使用它們。」這是什麼意思?您如何詳細闡述某人如何訪問我的數據庫? – saroj 2012-04-28 10:41:55

+0

@saroj - *「但是如何有人可以從加密的用戶和密碼知道真實的用戶名和密碼?」*。他們不需要。他們只是使用加密的用戶名/密碼......就像程序一樣。 – 2012-04-28 11:26:07

0

加密的數據傳遞到DriverManager不是一個選項。
您應該將解密的字符串傳遞到DriverManager。所以,地方你會擁有用戶名和密碼進行加密和解密,然後他們之前將它們傳遞給DriverManager
然後你就會有其他的問題,例如在哪裏存儲私鑰等,但作爲第一道防線,它會比使用明文更好,因爲我的理解是你有一些安全要求。

你沒有提到你使用的是什麼操作系統。如果您使用的是Windows,我建議使用Windows based authentication(與當前windows用戶進行身份驗證的數據庫連接)。因此無需在連接字符串中提供用戶名和密碼。檢查Oracle是否支持這一點(只嘗試使用MS-SQL服務器。我提供的鏈接很有用)。
這是恕我直言最好的選擇。對於Linux,必須有相同的東西。

相關問題