Создаю приложение на Delphi, нужно сделать авторизацию и работу с БД Access.
Возник вопрос, как внешне изолировать БД, что-бы доступ к данным был только из приложения, а в приложение, можно было входить только указав верный Логин и Пароль + секретное слово, которые занесены в Access.
И ещё кое-что, подскажите как скрыть БД от пользователя, что-бы эта база не была видна вне приложения.
Аксес для этой задачи однозначно не подходит Хотя если построите трёхзвенное приложение и будете шифровать все критические поля то можно помучаться.
Я бы сделал так:
Разместил бы базу на другом сервере. FireBird.
В ней завёл бы обычного юзера. Пользователю разрешл бы читать только определённые объекты tables, views и выполнять определённые процедуры. Другими словами сделал бы так чтобы пользователь не мог читать писать то что ему нельзя. Там же на сервере запустил бы другое приложение задача которого подсоединиться к базе как sysdba и прочесть табличку с логинами паролями пользователей и сидеть ждать соединения пользователя. Вторая задача серверного приложения принимать соединения по ssl и дешифровать их. Тут же должна быть защита от подбора пароля.
На клиенте бы использовал ssl.
Но у этого решения есть большая проблема чтобы обезопаситься от dll injection нужно избавиться от внешних ssleay.dll и fbclient.dll нужно взять их исходники и внедрить в приложение без использования техники dll. А это явно не Delphi.
Но главный вопрос что Вы хотите сделать?
Если пользователь может запустить приложение и пользоваться им то что ему мешает сделать простой скрипт который распарсит данные из базы? Любое Windows GUI приложение которое использует Windows API может быть обмануто внешней программой.
Если задача ограничить пользователя только его песочницей -- то тут нужно работать над устройством базы данных её структурой и бизнеслогикой. Firebird позволяет используя только возможности сервера сделать различные ограничения в том числе отображать записи из таблицы избирательно через view (блокируя при этом доступ к таблице).
Но если база физически доступна пользователю то шифруйте её. Возможно есть какие-то готовые решения.
1) Какая-то защита логины-пароли и в самом аксессе есть. Да почти в любой БД (или любой).
Если достаточно надежна - юзаем ее, и извне (из офисса) тоже будет доступ только по логину и паролю.
2) 100% надежный вариант: архивировать под паролем.
Это от брутфорса или взлома самой БД.
Но реверс-инженер может само приложение взломать, узнав пароль или изменив его. Если ему заплатят.
дурацкий совет, прокатит если бд маленькая,
зашифровать бд самостоятельно, запаковать в *.res, его в свою очередь воткнуть в само приложение, расшифровать в озу, и сделать вид что это файл смапленый в озу, конечно при наличии пароля выковырять бд не составит труда.
А никак, пароль на БД подбирается за пару секунд, безопасность, это жирный мину всех встраиваемых БД (Firebird Embedded, SQLite). Варианта 2 - использовать нормальный SQL (например Firebird, очнь легковесный) или делать шифрование-дешифрование на лету.
Да, вводных слишком мало, НО если морда в дельфи а база в аксессе, то сам Аллах значения шифровать, и тут уже лишь от фантазии зависит, а в базу насыпать соли... Встроенные механизмы авторизации аксесса бестолковые, но и их задействовать не будет лишним. Основная идея защиты, должна быть в повышении трудоёмкости её обхода.