2009-03-18 26 views
9

私は、データベースに接続するはずの普通のJavaアプリケーションを持っています。私は、プロパティファイルにデータベース接続URLとユーザー名/パスワードを格納したり、アプリケーションにハードコードしたりしたくない。 共通の方法この問題を解決するにはどうすればよいですか? Javaアプリケーションがユーザー名/パスワードを明らかにせずにデータベースに接続する方法安全なJDBC接続

答えて

3

保存したくない場合は、プロンプトを表示する必要があります。あなたはパスワードを暗号化することができますが、あなたはそれを解読する鍵を持っていなければならず、あなたは同じ問題に悩まされています。

+0

右:値がスペースを含む文字列の場合は、二重引用符で文字列を囲む必要があります。 別の場所にユーザー名とパスワードを格納し、Javaアプリケーションがこれらのu/pの組み合わせを取得できるようにすることもできます。何らかの種類のプロキシライブラリを使用しているユーザーにそれらを公開することはできません。 またはJNDI? – Alex

5

私は.NETの開発者ですが、私はまったく同じ状況に陥っています。

私は昨年、クレジットカードデータを保存するためにPCIに準拠しなければならなかった会社で働いていたので、セキュリティは大きな問題でした。 URL /ログインデータはどこかに存在しなければなりません。私がそれを確保するために見た最も一般的な方法は、暗号化です。特にJavaについてはわかりませんが、.NET Frameworkにはいくつかの暗号化ネームスペースがあります。これらを使用してデータベースログインを暗号化しました。

まだデータを暗号化/復号化するために使用される暗号化キーである潜在的なセキュリティ脆弱性があります。ここでは、PCIの「補償制御」方法を使用しました。キーへのアクセスは「キー管理」の役割に限定されています。また、キー自体のアクセスも追跡して、ユーザーが開始したすべてのアクセスとシステムによって開始されたアクセスの記録があるようにしました。誰もこれらのログにアクセスできなかったため、単一のユーザーがトラックをカバーすることはできませんでした。これらの重複するセキュリティ方法は、本質的に、データを危険にさらすために複数の管理者間の調整された陰謀を必要としない状況を作り出します。

0

アプリケーションサーバーのJNDIコンテキストに、構成されたデータソースとして情報を格納することをお勧めします。デプロイ時に、アプリケーションサーバーの機能を使用してデータソースを構成できます。アプリケーションが実行する必要があるのは、実行時に適切なJNDI名をルックアップして使用することだけです。これは、Java Webアプリケーションの一般的なパターンです。

+0

右。しかし、私のアプリケーションは、アプリケーションサーバー内で実行されていません。これはスタンドアロンのJavaアプリケーションです。はい、私はそこからJNDIに接続でき、そこからデータソース参照を取得できますが、推奨される方法ではありません。 JNDIデータソースは、INSIDEアプリケーションサーバーを実行しているアプリケーションでのみ使用する必要があります。 – Alex

+0

あなたが本当にここでやっているのは、問題を解決することだけです。今では、アプリケーションサーバーがそのデータをどのように処理するかについて心配する必要があります。ここでも、サーバーにアクセス権があるか、アプリケーションサーバーにキーを提供する必要があります。 –

2

サーバーベースアプリケーションのこの問題に対する一般的な解決策の1つは、アプリケーション/サービスの実行ユーザーのみがその内容を読み取ることができるようにユーザー権限が設定されたファイルにユーザー名とパスワードを格納することです。

たとえば、アプリケーションをユーザーfoo-serviceとして実行し、foo-serviceユーザーのすべてのアクセス権限を継承します。ユーザー名とパスワードを含むファイルは、そのユーザーだけが読むことができます。ファイルから値を読み取り、通常どおりデータベースに接続します。このアプローチの

可能性のある問題:

  • このマシンのスーパーユーザがデータベースにパスワードを取得することができるかもしれません。
  • アプリケーションのセキュリティに侵入した攻撃者は、データベースの資格情報にアクセスできます。

上記の問題は、通常、アプリケーションのアクセス権をデータベースとネットワークに合わせることによって緩和されます。基本的に何かを隠そうとしているので、あなたが出てくる他のほとんどの解決策は、鶏と卵の問題につながります。

0

Webサービスを使用して、データベースアクセスを行うサーバーとアプリケーションを分離します。 Webアプリケーションに署名して、適切に署名されたアプリケーションのみがWebサービスサーバーを呼び出すことを許可します。

0

システムプロパティを使用してファイルをロードできます。 -Dapplication.configuration = application.properties。

プロパティファイルが渡されないと、デフォルトの設定でデフォルトファイルを使用する必要があります。

ファイルが存在する場合は、デフォルト設定を設定から提供された値で上書きします。

のjava -Dlog4j.configuration =ファイル:/log4j.properties -Dapplication.configuration =ファイル:/live-conf.conf -jar app.jar "applicationarg1" "applicationarg1" フォローする

その他の情報源: をhttps://docs.oracle.com/javase/tutorial/essential/environment/properties.htmlシステムプロパティをオーバーライドする方法

-Dproperty =システムプロパティの値を設定した値 。 - 良い選択肢かもしれ

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html