Как правильно создать настольное приложение для базы данных? - PullRequest
4 голосов
/ 03 июля 2010

Я только что понял, что нет лучшего способа скрыть пароль подключения к строке MySQL в моем исполняемом файле, особенно в файле JAR.Даже шифрование его в EXE только замедлит процесс (хотя я не уверен, сколько времени потребуется, чтобы получить зашифрованный пароль из файла EXE).

Итак, насколько я понимаю, мне нужно что-то посередине, что бы добавлять, редактировать, удалять и т.д. в базу данных.Похоже, работа для REST API или, возможно, сервисы SOAP.

Мой вопрос: какой мне использовать?Или я должен использовать что-то еще?Я думал о Zend Framework для создания этих REST API.Затем я бы использовал Qt для создания настольного приложения для вызова этих API.Но если я продолжу работу с REST, мое приложение будет трехуровневым.Разве не было бы лучше, если бы я просто создал веб-приложение?Может быть, я должен просто придерживаться настольных приложений, вызывать эти API, так как приложение уже завершено, и мне просто нужно перейти от прямого подключения к MySQL к вызову этих API для выполнения задач, а не превращать все приложение в сеть.

Любой совет будет очень полезным.Заранее спасибо.

ОБНОВЛЕНИЕ:

Я ищу защиту, которая защитила бы мое соединение с паролем MySQL.

Obfuscator будет только запутывать код, он не будет скрывать информацию о моей строковой базе данных, которую, на мой взгляд, можно легко найти с помощью grep после декомпиляции JAR с помощью таких инструментов, как JAD.

О моем приложении:

  1. Использование централизованной базы данных MySQL
  2. Тысячи пользователей
  3. Содержит конфиденциальную информацию
  4. Мой клиент использует Linux и Windows
  5. Мой сервер использует Linux
  6. Весь доступ осуществляется через локальную сеть, без внешнего подключения (из Интернета и т. Д.)

Мои текущие решения (пожалуйста, комментарии):

  1. Использование REST API (безопаснее, поскольку пароль MySQL находится на сервере)
  2. Использование Qt с шифрованием пароля

Ответы [ 3 ]

3 голосов
/ 03 июля 2010

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

Во многих приложениях нет ничего плохого в хранении учетных данных для входа в базу данных в виде простого текста.В других случаях вы можете попробовать:

  1. зашифровать пароль выбранной пользователем базы данных с использованием достаточно надежного алгоритма, например Blowfish, с использованием жестко закодированного ключа;
  2. чтобы пользователь каждый раз предоставлял пароль и «входил» в программу;
  3. сохранял пароль базы данных в виде простого текста, но шифровал данные с помощью жестко заданного ключа;
  4. то же самое, что и выше, но шифрование данных каждого пользователя с использованием его собственного предоставленного пароля;
  5. то же самое, что и 2, но сохранение данных каждого пользователя в его собственной базе данных с их регистрационной информацией в качестве учетных данных базы данных;
  6. хранение данных в защищенной удаленной базе данных, в которую пользователи должны войти, чтобы получить доступ через SOAP API;
  7. с использованием разрешений собственной файловой системы для защиты файла конфигурации, содержащего учетные данные для входа;
  8. то же самое, что и # 1, но развертывание собственной действительно сложной системы генерации ключей: например, запустите SID или идентификатор оборудования через MD5, используя случайно сгенерированную соль,и затем использовать результат для шифрования учетных данных для входа.

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

Редактировать: Я просто хочу добавитьдаже если вы не можете жестко закодировать ключ шифрования в своем приложении, существуют обфускаторы для Java, .NET и большинства других популярных языков / сред.Одним из ключевых применений этих инструментов является скрытие чувствительных жестко запрограммированных строк, таких как ключи шифрования.

Редактировать 2: Учитывая дополнительную информацию о данном приложении, только 1, 6 и8 будет применяться в этом случае.И SOAP API больше подходит для # 6, как правильно заметил Джордж.

Я также хочу упомянуть, что являются обфускаторами Java-ресурсов, которые шифруют строковые литералы. Это только один пример.

2 голосов
/ 03 июля 2010

Это в значительной степени зависит от среды, в которой работает ваше приложение

а) БД и клиент локальный
б) дб и клиент в локальной сети
в) дб в инете

мои два цента:

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

В любом случае, если ваш случай b или c, я бы использовал диалоговое окно входа для пользователя.

Может быть, вам стоит взглянуть на этот инструмент http://www.greensql.net/. Это как брандмауэр, но для mysql / postresql
Таким образом, вы можете запретить что угодно и разрешить только те запросы, которые хотите.

1 голос
/ 03 июля 2010

Если вы используете Java для реализации настольного приложения базы данных, я бы рекомендовал использовать Java DB в качестве базы данных.Есть несколько способов его защитить, и есть альтернатива наличию пароля в строке подключения.Я бы порекомендовал прочитать Безопасность Java DB - Функции безопасности в Java DB Release 10.4

Легко развернуть ваше приложение с Java DB, так как большая часть его может быть встроена в одно и то жефлягаЯ использовал его в приложении Point of Sale, реализованном на Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...