Защита базы данных от клиентов Java - PullRequest
2 голосов
/ 05 февраля 2010

Концепция, которую я имею, использует центральную базу данных MySql, в которой работает много клиентов Java и которые используют эту базу данных (подключаясь напрямую). Клиенты будут общедоступны, поэтому проблема безопасности станет проблемой.

Поскольку Java можно декомпилировать, я не могу поместить часть безопасности этой системы в клиентское приложение. Мне потребуется исходное имя пользователя / пароль для доступа к базе данных, но кроме этого, я не могу ничего защитить в клиенте, поскольку хакер может просто извлечь данные о соединении и написать свое собственное приложение для взлома. *

Итак, это привело меня к параматеризованным хранимым процедурам. Это позволило бы мне немного обезопасить базу данных, ограничив разрешения просто SELECT & EXECUTE. И я думал о том, чтобы каждый SP имел параметры имени пользователя / пароля, поэтому уровень разрешений пользователей можно проверять при каждом обращении к SP, чтобы пользователи низкого уровня не могли взломать / использовать SP администратора.

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

Если я использую параматеризованные SP, как я могу очистить параметры, прежде чем SP запустит их в базу данных? В PhP это просто, но с локально запущенным Java-клиентом у меня нет серверного приложения для этой работы. Я знаю, что мог бы поместить какое-нибудь серверное приложение между базой данных и клиентом, но я хочу избежать этого, если это вообще возможно.

Можно ли этого достичь? Будет ли он тогда «безопасным»?

Это правильный путь для этого или есть лучший способ реализовать безопасность такого рода с помощью этой архитектуры?

1 Ответ

5 голосов
/ 05 февраля 2010

Это правильный путь для этого или есть лучший способ реализовать безопасность такого рода с помощью этой архитектуры?

Я думаю, тебе нужно пройти три уровня. Вы не можете выставить свою базу данных напрямую ненадежным клиентам. Вы хотите, чтобы сервер приложений находился между ними. Конечные пользователи будут входить в систему на сервере приложений (в идеале, с отдельным именем пользователя / паролем для каждого отдельного пользователя, который вводится этим пользователем и который не содержится в приложении). Только сервер приложений подключается к базе данных, и он делает только то, что считает нужным (например, не выполняет напрямую какой-либо SQL-запрос, получаемый от клиентов, а определяет количество допустимых методов / запросов).

Если вы все еще хотите напрямую переходить от клиента к базе данных, по крайней мере, создайте отдельные учетные записи пользователей базы данных (и не используйте жестко запрограммированные пароли). Но это (надлежащим образом управляя всеми разрешениями) может оказаться слишком сложным для администратора баз данных, и ошибка конфигурации может привести к огромным проблемам с безопасностью.

...