2012-06-08 35 views
1

我正在編寫一個大學任務的程序,我們需要使用JDBC連接到MySQL數據庫。JDBC本質上不安全?

考慮到數據庫密碼必須以某種形式暴露給程序,爲了它能夠訪問數據庫,當然你最好還是先把密碼交給黑客吧?

我是對的,還是我錯過了什麼?

+0

你是在談論一個網絡應用程序或厚客戶端應用程序?兩者之間的問題非常不同。 –

+0

在給定的情況下,工作人員將使用該程序,但沒有理由黑客或惡作劇的工作人員無法得到它。 (我的意思是從數據庫中的表中驗證用戶身份,但是使用數據庫密碼,所有數據都可以收集,彩虹/生日等)。 – user1277170

+0

對,我意識到由於appplication類型風險不同,所以我改變了我對你上面看到的要求你澄清的評論。 –

回答

0

密碼必須暴露給應用程序,這是肯定的,否則應用程序如何連接到數據庫?

但這不是一個很大的安全漏洞。運行應用程序的機器必須不惜一切代價安全。這是主要的事情!如果一個黑客或者一個天真的用戶可以訪問運行應用程序的機器,那麼即使他們沒有足夠的權限,他們也可能會徹底破壞系統。一旦有人可以訪問應用程序的源代碼,並訪問其所運行的計算機,那麼世界上就沒有辦法確保其安全,除非可能擁有非常好的用戶帳戶管理系統。

你可以將密碼外化到一個文本文件並存儲它,甚至可以用鹽,這基本上是我所知道的最好/最常用的方式......但這只是讓有權訪問的人的生活到你的機器稍微難一點...有權訪問源代碼,如果它們很聰明,它們仍然可以進入你的數據庫,或者如果它們不是,它們可以簡單地刪除或損壞它。

因此,JDBC沒有問題......如果您不同意,請說服數百萬的JDBC用戶。安全不是建立在單一技術上的。它涉及保護您的所有系統,並在每個不同節點上添加一層保護層,但要注意,每一層保護都會影響越來越多的可用性和靈活性(這是人們不僅在頂部添加1000層密碼的原因的應用程序/數據庫,它只是不切實際,而且大多數情況下是不必要的,甚至)。

+1

如果你存儲* hashed *密碼,你將如何爲了將它作爲數據庫連接認證的一部分發送回來? –

+0

@Greg Kopff我使用的DBMS允許你用純文本密碼創建一個文件,然後當你啓動SQL服務器時,它會在文件中散列密碼並將它保存爲** - hash - (後跟哈希)** ....顯然,DBMS必須具有更改文件的權限,並且該文件不能位於源代碼中。 – Renato

+0

這個過程適用於CouchDB:http://guide.couchdb.org/draft/security.html#hashing,但我想像一下類似的過程可以用於SQL數據庫。 – Renato

0

JDBC是非標準的API,Java應用程序使用連接到一個數據庫系統。它非常成熟,可靠並且在Java社區中廣泛使用。

雖然,某些應用程序在使用不當的API通過暴露 - 適用於源代碼示例 - 數據庫連接憑據。

How can I protect MySQL username and password from decompiling?有一個很好的解釋這個設計problema和解決它的一些建議:像存儲在應用程序的外部文件的數據庫憑據和採用多層架構。