我们计划在生产中推出我们的应用程序。 该应用程序有许多模块 - Apache上的PHP代码,tomcat java应用程序,C ++代码应用程序。 所有这些模块都需要连接到MySQL数据库。
我们希望通过在两者之间放置防火墙将应用程序和数据库分成两个独立的安全层。这是为了完全隔离数据库服务器与任何不相关的访问,以保护敏感数据。防火墙只允许从运行应用程序的服务器到MySQL端口上的数据库服务器的连接。
通常,如果空闲时间足够长,防火墙将丢弃连接。这会严重影响应用程序和数据库之间的连接。需要检测连接失败并由应用程序重新启动,并且此逻辑不会在任何地方实现。
问题: 1.如果使应用程序更能容忍丢失的连接方案不是一种选择,那么解决问题的最佳方法是什么?可以以不会导致此行为的方式设置防火墙吗?根本没有使连接过期将填满连接表并使防火墙崩溃。要将到期时间设置为更高的值也可能有可能在高峰时间填满连接表,并且并不总是清楚哪个时间间隔足够长... 2.这样的安全分层架构是否会带来真正的安全优势?
提前谢谢。
胡
答案 0 :(得分:1)
防火墙只允许 来自运行的服务器的连接 应用程序到DB服务器上 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
将确保在使用它之前连接处于活动状态。
答案 1 :(得分:0)
尝试使用对数据库进行心跳调用的连接池,这将使您的连接保持活动状态。此外,如果任何现有连接死亡,连接池将尝试重新建立与数据库的连接。