JAVA Swingクライアント、リモートデータベースへのデータアクセス。イバティス

StackOverflow https://stackoverflow.com/questions/181784

質問

リモートデータベースにアクセスする必要のあるJavaクライアントがあります。ユーザーからデータベース資格情報を非表示にし、コード内の資格情報をハードコーディングしないことが目標です。したがって、データベースアクセスはおそらくサーバー側で行う必要があります。

Ibatisをデータ抽象化フレームワークとして使用することに制限されています。それとは別に、WebサーバーでJBossを実行しているため、データソースを使用できます。

リモートデータベースアクセスとデータのシリアル化/逆シリアル化をどのように設計しますか。ソケットよりも何らかのデータストリームのWebサービスを好むでしょうか?どちらをどうやって実現しますか?

役に立ちましたか?

解決

サービス層を構築し、RMIを介して公開します。JBossのようにEJB3ステートレスセッションBeanとして、場合によっては純粋なRMIとして公開します。特別な必要がない限り、私はウェブサービスを気にしません。 RMIがシリアル化のケースを取り上げます。

サービスレイヤーは、Swingアプリの起動時に入力された資格情報を使用してユーザーを認証するメソッドを公開する必要があります。データの呼び出しはすべてサービスレイヤーを経由します。 SwingアプリにはSQLは存在しません。

このアレンジメントには、データベースの資格情報を単に隠すこと以外の利点もあります。階層化されたアーキテクチャになるだけでなく、サーバー上に単一のデータソースを持つことで、すべてのクライアント間で準備済みステートメントを共有することで効率が向上します。

他のヒント

では、ユーザーが資格情報を知らなくてもデータベースにアクセスできるようにしたいですか?唯一のオプションは、サーバー側のデータベースアクセスです。残念ながら、Javaでユーザー名とパスワードを非表示にする方法はありません。プロパティファイルに入れて暗号化すると、攻撃者がデバッガをアタッチして、コードに保持されている値を確認できます。

また、安全な接続を介してDBに接続している場合を除き、誰かがtcpdumpなどのパケットスニファを実行し、そこで資格情報を取得できます。

JBossサーバーを実行していると言いますが、クライアントアプリケーションがデータベースに直接アクセスしないようにリモートEJBをセットアップするのが最善かもしれません-EJBメソッドを経由する必要があります。 (これはEJBである必要はありません。必要に応じて、Webサービスなどを実行できます。)

ポイントは、サーバーがデータベースと直接通信し、クライアントの唯一のアクセスは、サーバー上で定義した限られたインターフェースのセットを経由することです。

すでに述べたように、データベース接続を処理するサーバーに接続する必要があります。 30分間の努力で、誰かがセキュリティを破るのを効果的に防ぐ方法はありません。

クライアントがイントラネット内である程度ローカルに接続している場合、アプリサーバーでEJBを使用するのがおそらく最良の選択です...おそらくステートレスセッションBeanが必要ですが、メッセージ駆動型Beanは必ずしも割引きません。

トラフィックが外部から来るより長い距離では、HTTPS経由のWebサービスを使用します

いずれにしても、ほとんどのアプリサーバーには、WSDLを使用してEJBをWebサービスとして公開するメカニズムがあります。また、WSDLからクライアントを生成し、Webサービスを呼び出すためのユーティリティが約100個あります(軸のwsdl2javaは十分に機能します)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top