Межсетевой экран между приложением и сервером БД - PullRequest
0 голосов
/ 24 февраля 2011

Мы планируем запустить наше приложение в производство.Приложение имеет множество модулей - PHP-код на Apache, Java-приложения Tomcat, C ++-приложения.Все эти модули должны подключаться к базе данных MySQL.

Мы хотели бы разделить приложение и базу данных на два отдельных уровня безопасности, поместив межсетевой экран между ними.Это делается для полной изоляции серверов БД от любого несущественного доступа для защиты конфиденциальных данных.Брандмауэр разрешает соединения только с серверов, на которых запущено приложение, с серверами БД через порт MySQL.

Обычно брандмауэры сбрасывают соединения, если они простаивают достаточно долго.Это может плохо повлиять на связь между приложениями и базой данных.Приложение должно обнаруживать и повторно инициировать сбой соединения, и эта логика не везде реализуется.

Вопрос: 1. Если сделать приложение более терпимым к сценарию потерянного соединения, это не вариант,лучший способ решить проблему?Можно ли настроить брандмауэр таким образом, чтобы это не вызывало такое поведение?Не истечение срока действия соединений приведет к заполнению таблицы соединений и аварийному завершению брандмауэра.Чтобы установить время истечения на более высокие значения, также может возникнуть риск заполнения таблицы соединений в часы пиковой нагрузки, и не всегда понятно, какой интервал времени достаточно длинный ... 2. Будет ли такая схема многоуровневой защиты приносить какие-либо реальные преимущества в плане безопасности?1007 *

Заранее спасибо.

Хулио.

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Брандмауэр разрешает подключения только от серверов, на которых запущено приложение, к серверам БД через порт 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 обеспечат работоспособность соединения перед его использованием приложением.

0 голосов
/ 24 февраля 2011

Попробуйте использовать пул соединений, который выполняет сердечный вызов для базы данных, и ваши соединения будут активными.Кроме того, пул соединений попытается восстановить соединение с базой данных, если какое-либо из существующих соединений прекратит работу.

...