Клиент JAVA Swing, доступ к данным в удаленной базе данных; Ibatis - PullRequest
3 голосов
/ 08 октября 2008

У меня есть Java-клиент, которому нужен доступ к удаленной базе данных. Цель состоит в том, чтобы скрыть учетные данные базы данных от пользователя, а не жестко закодировать любые учетные данные в коде. Следовательно, доступ к базе данных, вероятно, должен быть на стороне сервера.

Я ограничен в использовании Ibatis в качестве структуры абстракции данных. Кроме того, на веб-сервере запущен JBoss, что позволяет мне использовать источники данных.

Как бы вы разработали удаленный доступ к базе данных и сериализацию / десериализацию данных. Вы бы предпочли веб-сервисы какого-либо потока данных через сокет? Как бы вы реализовали оба варианта?

Ответы [ 3 ]

3 голосов
/ 08 октября 2008

Создайте сервисный уровень и выставьте его поверх RMI - возможно, в виде сессионных компонентов EJB3 без состояния, как у вас JBoss, возможно, в виде чистого RMI. Я не стал бы беспокоиться о веб-сервисах, если у вас нет особых потребностей. RMI возьмет на себя сериализацию за вас.

Ваш уровень сервиса должен предоставить метод для аутентификации пользователей с использованием их учетных данных, введенных при запуске приложения Swing. Все вызовы данных проходят через сервисный уровень. В приложении Swing не существует SQL.

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

0 голосов
/ 08 октября 2008

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

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

Для более длинных расстояний, когда трафик поступает извне, я бы использовал веб-сервисы по HTTPS

В любом случае большинство серверов приложений имеют механизмы для представления своих EJB-компонентов как веб-сервисов с помощью WSDL; и существует около ста утилит для генерации клиентов, для вызова веб-сервиса, из WSDL (достаточно хорошо работает wsdl2java для оси)

0 голосов
/ 08 октября 2008

То есть вы хотите, чтобы пользователи имели доступ к базе данных, не зная учетных данных? Ваш единственный вариант - доступ к базе данных на стороне сервера. К сожалению, в Java нет способа скрыть имя пользователя и пароль - если вы поместите его в файл свойств и зашифруете его, решительный злоумышленник все равно сможет подключить отладчик и посмотреть, какие значения хранятся в вашем коде.

Кроме того, если вы не подключаетесь к БД по безопасному соединению, кто-то может запустить перехватчик пакетов, например tcpdump, и получить там учетные данные.

Вы говорите, что используете сервер JBoss, что может быть лучше, если вы настроите удаленные EJB-компоненты, чтобы ваше клиентское приложение не обращалось к базе данных напрямую - оно должно проходить через ваши EJB-методы. (Между прочим, это не обязательно должен быть EJB, вы можете сделать что-нибудь, например, веб-сервисы).

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

...