Концепция, которую я имею, использует центральную базу данных MySql, в которой работает много клиентов Java и которые используют эту базу данных (подключаясь напрямую). Клиенты будут общедоступны, поэтому проблема безопасности станет проблемой.
Поскольку Java можно декомпилировать, я не могу поместить часть безопасности этой системы в клиентское приложение. Мне потребуется исходное имя пользователя / пароль для доступа к базе данных, но кроме этого, я не могу ничего защитить в клиенте, поскольку хакер может просто извлечь данные о соединении и написать свое собственное приложение для взлома. *
Итак, это привело меня к параматеризованным хранимым процедурам. Это позволило бы мне немного обезопасить базу данных, ограничив разрешения просто SELECT & EXECUTE. И я думал о том, чтобы каждый SP имел параметры имени пользователя / пароля, поэтому уровень разрешений пользователей можно проверять при каждом обращении к SP, чтобы пользователи низкого уровня не могли взломать / использовать SP администратора.
Похоже, что это обеспечивает определенный уровень безопасности и обеспечивает многоуровневый доступ к базе данных, но затем я получил SQL-инъекцию.
Если я использую параматеризованные SP, как я могу очистить параметры, прежде чем SP запустит их в базу данных? В PhP это просто, но с локально запущенным Java-клиентом у меня нет серверного приложения для этой работы. Я знаю, что мог бы поместить какое-нибудь серверное приложение между базой данных и клиентом, но я хочу избежать этого, если это вообще возможно.
Можно ли этого достичь?
Будет ли он тогда «безопасным»?
Это правильный путь для этого или есть лучший способ реализовать безопасность такого рода с помощью этой архитектуры?