2008-10-08 6 views
3

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

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

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

ответ

3

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

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

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

0

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

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

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

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

0

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

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

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

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