2011-02-24 32 views
0

我們計劃在生產中啓動我們的應用程序。 該應用程序有許多模塊 - Apache,Tomcat Java應用程序,C++代碼應用程序上的PHP代碼。 所有這些模塊都需要連接到MySQL數據庫。應用程序和數據庫服務器之間的防火牆

我們希望通過在兩者之間放置防火牆來將應用程序和數據庫分隔爲兩個單獨的安全層。這是爲了將DB服務器與任何不相關的訪問完全隔離,以保護敏感數據。防火牆將只允許運行應用程序的服務器連接到MySQL端口上的數據庫服務器。

通常情況下,如果防火牆的閒置時間足夠長,它將會斷開連接。這可能嚴重影響應用程序和數據庫之間的連接。連接失敗需要被應用程序檢測並重新啓動,並且這個邏輯在各處都沒有實現。

問題: 1.如果讓應用程序更容忍丟失的連接方案不是一種選擇,那麼解決問題的最佳方法是什麼?防火牆可以以不會導致此行爲的方式進行設置?根本不會過期連接將填滿連接表並使防火牆崩潰。將過期時間設置爲更高的值也可能冒高峯時間填滿連接表的風險,並且並不總是清楚哪個時間間隔足夠長...... 2.這種安全分層模式是否會首先帶來真正的安全優勢?

預先感謝您。

Julio。

回答

0

嘗試使用對數據庫執行心跳呼叫的連接池,這將使您的連接保持活動狀態。此外,如果任何現有連接死亡,連接池將嘗試重新建立到數據庫的連接。

1

防火牆只允許從 MySQL的端口上運行 應用程序到數據庫服務器

我認爲是保護的東西最安全的方式對服務器 連接。當然,開發人員也會有意外數據庫錯誤的用戶名和密碼。

在Tomcat中,您可以添加這樣的事情您的context.xml:

<Resource name="name" 
     auth="Container" driverClassName="com.mysql.jdbc.Driver" 
     logAbandoned="true" maxActive="100" maxIdle="30" maxWait="10000" 
     type="javax.sql.DataSource" 
     removeAbandoned="true" removeAbandonedTimeout="60" 
     username="user" password="password" 
     url="jdbc:mysql://localhost:3306/dbname" 
     testOnBorrow="true" validationQuery="SELECT 1" 
    /> 

textOnBorrowvalidationQuery將確保連接的應用程序之前,已經使用它。