2008-10-08 7 views
3

원격 데이터베이스에 액세스해야하는 Java 클라이언트가 있습니다. 사용자의 데이터베이스 자격 증명을 숨기고 코드 내의 모든 자격 증명을 하드 코딩하지 않는 것이 목표입니다. 따라서 데이터베이스 액세스는 서버 측에 있어야 할 것입니다.JAVA Swing 클라이언트, 원격 데이터베이스에 대한 데이터 액세스; Ibatis

데이터 추상화 프레임 워크로 Ibatis를 사용하도록 제한됩니다. 그 외에도 웹 서버에서 JBoss를 실행하고 있으므로 데이터 소스를 사용할 수 있습니다.

어떻게 원격 데이터베이스 액세스 및 데이터 직렬화/직렬화 복원을 설계 하시겠습니까? 소켓을 통해 어떤 종류의 데이터 스트림의 웹 서비스를 선호 하시겠습니까? 어떻게 둘 다 깨달았습니까?

답변

3

서비스 레이어를 빌드하고 RMI를 통해 - JBoss가있는 것처럼 EJB3 상태없는 세션 Bean으로, 가능하면 순수 RMI로 노출 시키십시오. 나는 당신에게 특별한 필요가 없다면 웹 서비스에 신경 쓰지 않을 것이다. RMI가 직렬화의 경우를 취할 것입니다.

서비스 레이어는 스윙 앱을 시작할 때 입력 한 자격 증명을 사용하여 사용자를 인증하는 방법을 노출해야합니다. 데이터에 대한 모든 호출은 서비스 계층을 통과합니다. Swing 앱에는 SQL이 없습니다.

데이터베이스 자격 증명을 숨기는 것 외에 다른 방법이 있습니다. 계층화 된 아키텍처로 끝날뿐만 아니라 서버에 단일 데이터 소스를 보유하여 모든 클라이언트간에 준비된 명령문을 공유함으로써 효율성을 확보 할 수 있습니다.

0

사용자가 자격 증명을 모른 채 데이터베이스에 액세스 할 수있게하려면? 유일한 옵션은 서버 측 데이터베이스 액세스입니다. 불행히도 Java에서 사용자 이름과 암호를 숨길 수있는 방법은 없습니다. 속성 파일에 넣고 암호화하면 결정된 공격자가 디버거를 첨부하고 코드에서 보유하고있는 값을 확인할 수 있습니다.

또한 보안 연결을 통해 DB에 연결하지 않는 한 누군가 tcpdump와 같은 패킷 스니퍼를 실행하고 그곳에서 자격 증명을 얻을 수 있습니다.

JBoss 서버를 실행 중이라고 말하면 클라이언트 응용 프로그램이 데이터베이스에 직접 액세스하지 못하도록 원격 EJB를 설정하는 것이 가장 좋습니다. EJB 메소드를 사용해야합니다. (EJB가 될 필요는 없습니다. 그런데 원하는 경우 웹 서비스와 같은 것을 할 수 있습니다).

요점은 서버가 데이터베이스와 직접 대화하고 클라이언트의 유일한 액세스가 서버에서 정의한 제한된 인터페이스를 통해 이루어지는 것입니다.

0

이미 말했듯이 데이터베이스 연결을 처리하는 서버에 연결해야합니다. 30 분의 노력으로 보안 침해를 효과적으로 방지 할 수있는 방법이 없습니다.

클라이언트가 인트라넷 내에서 다소 로컬로 연결하는 경우 응용 프로그램 서버의 EJB를 사용하는 것이 가장 좋은 선택 일 수 있습니다. 아마 무 상태 세션 콩을 원하지만 필연적으로 메시지 기반 빈을 할인 할 필요는 없습니다.

트래픽이 외부에서 오는 장거리를 들어

, 나는 어떤 경우 HTTPS

을 통해 웹 서비스를 사용하는 것이 대부분의 appservers는 WSDL로 웹 서비스로서의 EJB의의를 노출하는 메커니즘을 가지고; WSDL에서 웹 서비스를 호출하기 위해 클라이언트를 생성하는 약 백 개의 유틸리티가 있습니다 (축의 wsdl2java가 충분히 작동 함)