2012-03-15 47 views
0

對於Hibernate,我們可以使用連接池來管理它內部的連接。游泳池內的連接狀態是否打開?還是關閉?如果連接處於打開狀態,則可能存在安全威脅和數據庫威脅。連接池的用途是什麼?它有害嗎?

而且我們使用Oracle作爲數據庫 - 那麼在Oracle內部有一個內部機制來斷開未使用的連接?

回答

2

池化數據庫連接的目的是讓一組打開連接,以便每次應用程序嘗試打開新連接時,池都會透明地返回已打開的連接。這比每次打開新連接要快得多。

從數據庫的角度來看,它看起來像你的應用程序有開放但空閒的數據庫連接(就像你打開SQL控制檯而不運行任何查詢一樣)。

我不是安全專家,也不知道Oracle連接和TCP/IP堆棧有多安全。但是,空閒連接在應用程序之間保持幾秒鐘的事實應該不成問題。數以百萬計的應用程序正在使用數據庫連接池(實際上,我不能想到使用它的任何應用程序而不是),我從來沒有聽說過任何針對它的攻擊媒介。請記住,彙集的連接仍然是數據庫授權和身份驗證的主題。

考慮隧道或加密的數據庫連接,如果你擔心那麼多(或者如果數據庫連接是通過互聯網,而不是內部網。

+0

數據庫損壞怎麼辦?數據庫文件是否損壞 – Chan 2012-03-15 12:40:24

+0

@ Duli-chan:它與連接池無關,而且RDBMS建立在ACID原則的基礎上,沒有腐敗應該發生。 – 2012-03-15 12:41:43

-2

所有這些問題對於使用代碼都是透明的。只有在您自己實現連接池時,您纔會提出這些問題。如果你使用了一個衆所周知的(比如c3p0),那麼你不會接觸到這個問題,因爲你正在對DataSource接口進行編碼。

(這並不意味着這些庫是免費的bug,內存泄漏或orphane打開的連接)。

3

池內的連接是打開的(至少在一段時間內;取決於池的實現,閒置連接可能會關閉)。創建和打開新的數據庫連接可能很昂貴。合併用於降低成本。

使用連接池確實沒有比沒有安全威脅更多的安全威脅。無論哪種情況,您的應用程序對數據庫的訪問級別仍然相同;無論連接是否必須首先打開,都可以完成相同程度的損壞。

+2

另外,根據實施一池將有功能,以清理過期或死連接池是爲了提高性能 – cjstehno 2012-03-15 11:49:03

相關問題