2011-08-09 15 views
1

開発の一時的な手段として、Web.Configにデータベース接続文字列がハードコードされたWebサービスアプリケーションがあります。Webサービスの動的接続文字列単一ロードのアプローチ

これを外部の(暗号化された)ファイルに移動したいのですが、スピード違反が発生するため、すべてのWebサービスコールでこのファイルを読み取り、復号化する必要はありません。

グローバルへのサービスへの最初の呼び出しで接続文字列を読み取ってから、サービスへの後続の呼び出しでそれを参照できる優れた方法はありますか?

答えて

0

これは実際のパフォーマンス上の問題です(それ以外の場合は不要な複雑さを追加する可能性があります)。

パフォーマンス上の問題がある場合は、静的プロパティに格納してGlobal.asax OnApplicationStartに1回ロードし、実行時に他のクラスから静的プロパティを参照することができます。もしglobal.asaxが不可能ならば、まだ初期化されていなければ、設定ファイルから接続文字列を取り出すクラスにプロパティをラップすることができます。

"正しい"アプローチは、おそらくMunqやFunqのようなIOCコンテナを使用し、アプリケーション起動時にweb.configから一度だけロードして実行時に解決することです。これは単体テストも容易になるでしょう。しかし、あなたがまだそれを持っていない場合、それを導入することは過度かもしれません。

ただし、解読してメモリに保存すると、明らかに復号化された方法でメモリに格納されるため、メモリダンプなどに暗号化されていない接続文字列が含まれます。解決策は、ファイルをメモリ内で暗号化したままにして、それを解読するというわずかなオーバーヘッドを受け入れることです。もう1つの解決策は、この小さなセキュリティ上の問題を受け入れることです。それはあなたのアプリの性質に依存します。セキュリティには常にコストがかかります:-)

+0

ありがとう、非常に有用なコメント。 – Mattl

0

標準的なアプローチは、機密データを設定ファイルセクションに入れ、そこにencrypt/decryptを置くことです。パフォーマンスの問題が発生した場合は、ロードバランシングと水平スケーリングを考慮してください。

それを参照することができます サービスにグローバルおよびその後の呼び出しにサービスに 最初の呼び出し時に接続文字列を読み取るための良い方法はありますか?

接続オブジェクトが有効になるまで有効です。オブジェクトが破棄されると、そのオブジェクトは破棄され、次の接続でCLRは機密データを再度復号化します。実際、機密データはできるだけ早く廃棄することをお勧めします。純粋な暗号化されていない状態で簡単に抽出することができるため、暗号化されていない暗号化は無駄になります。

関連する問題