【问题标题】:Firewall between application and DB server应用程序和数据库服务器之间的防火墙
【发布时间】:2011-02-25 04:38:16
【问题描述】:

我们计划在生产中启动我们的应用程序。 该应用程序有许多模块——Apache 上的 PHP 代码、tomcat java 应用程序、C++ 代码应用程序。 所有这些模块都需要连接到 MySQL 数据库。

我们希望通过在其间放置防火墙,将应用程序和数据库分成两个独立的安全层。这是为了将数据库服务器与任何不相关的访问完全隔离,以保护敏感数据。防火墙将只允许从运行应用程序的服务器到 MySQL 端口上的数据库服务器的连接。

通常,如果空闲时间足够长,防火墙会断开连接。这会严重影响应用程序和数据库之间的连接。连接失败需要由应用检测并重新发起,这个逻辑并不是到处都实现的。

问题: 1. 如果无法让应用程序更能容忍丢失的连接情况,那么解决问题的最佳方法是什么?可以以不会导致此行为的方式设置防火墙吗?根本不使连接过期将填满连接表并使防火墙崩溃。将过期时间设置为更高的值也可能会冒着在高峰时间填满连接表的风险,而且并不总是很清楚哪个时间间隔足够长…… 2. 这种安全分层架构首先会带来真正的安全优势吗?

提前谢谢你。

胡里奥。

【问题讨论】:

    标签: security firewall


    【解决方案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"
        />
    

    textOnBorrow 和 validationQuery 将确保连接在应用程序使用之前处于活动状态。

    【讨论】:

      【解决方案2】:

      尝试使用对数据库进行心跳调用的连接池,这将使您的连接保持活跃。此外,如果任何现有连接死亡,连接池将尝试重新建立与数据库的连接。

      【讨论】:

        猜你喜欢
        • 2011-04-18
        • 2022-07-06
        • 2011-11-19
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多