2011-02-24 3 views
0

프로덕션 환경에서 응용 프로그램을 시작할 계획입니다. 응용 프로그램에는 Apache, Tomcat Java 응용 프로그램의 PHP 코드, C++ 코드 응용 프로그램 등 다양한 모듈이 있습니다. 이 모든 모듈은 MySQL 데이터베이스에 연결해야합니다.응용 프로그램과 DB 서버 간의 방화벽

우리는 방화벽을 끼워 두 개의 별도 보안 계층으로 응용 프로그램과 데이터베이스를 분리하고 싶습니다. 이는 민감한 데이터를 보호하기 위해 DB 서버를 관련없는 액세스와 완전히 분리시키는 것입니다. 방화벽은 응용 프로그램을 실행하는 서버에서 MySQL 포트의 DB 서버로의 연결 만 허용합니다.

일반적으로 유휴 기간이 길면 방화벽이 연결을 끊습니다. 이는 응용 프로그램과 데이터베이스 간의 연결에 심각한 영향을 줄 수 있습니다. 응용 프로그램에서 연결 실패를 감지하고 다시 시작해야하며이 논리는 모든 곳에서 구현되지 않습니다.

질문 : 1. 응용 프로그램을 손실 연결 시나리오에 대해 더 관대하게 만들 수없는 경우 문제를 해결하는 가장 좋은 방법은 무엇입니까? 이 동작을 일으키지 않는 방식으로 방화벽을 설정할 수 있습니까? 연결이 만료되지 않으면 연결 테이블이 채워지고 방화벽이 손상됩니다. 만료 시간을 더 높은 값으로 설정하려면 피크 시간에 연결 테이블을 채울 위험이 있으며 어떤 시간 간격이 충분히 길지는 확실하지 않은 경우 ... 2. 보안 계층화 스키마가 처음부터 실질적인 보안 이점을 가져다 줍니까?

미리 감사드립니다.

훌리오.

답변

0

데이터베이스에 하트 비트 호출을하는 연결 풀을 사용하여 연결을 활성화합니다. 또한 기존 연결 중 하나라도 종료되면 연결 풀에서 데이터베이스에 대한 연결을 다시 설정하려고 시도합니다.

1

방화벽 단지 내가 생각

뭔가를 보호하는 가장 안전한 방법입니다 MySQL의 포트에서 DB 서버에 응용 프로그램을 실행하는 서버에서 연결을 허용합니다. 물론 개발자가 우발적 인 데이터베이스 오류를 일으킬 수있는 사용자 이름과 암호가 있어야합니다.

바람둥이, 당신은 당신의 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 그것을 사용하여 연결이 응용 프로그램 전에 살아 있는지 확인합니다.

관련 문제