これに関するさまざまな解決策について読み込もうとしましたが、進むべき道は個々のシナリオに大きく依存することを理解しています. これは良いリンクでした: http://msdn.microsoft.com/en-us/magazine/cc164054.aspx。
この特定のシナリオに関する専門家のアドバイスをいただければ幸いです。
シナリオ:
ローカル管理者権限を持つクライアントに配布される SQL コンパクト データベースを含む WPF アプリケーション。アプリケーションは、常にインターネット接続に依存することはできません。アプリケーション自体がデータベースにアクセスできる必要があることを除いて、なし。では、これに対する最善のシナリオ、または最悪でないシナリオは何でしょうか? ユーザーがデータベースの資格情報を取得できないようにするためです。
編集:データベースはエンジンのデフォルトで暗号化されており、強力なパスワードが設定されています。
オプション:
- 保護された構成を使用した構成ファイル セクションの暗号化 ( http://msdn.microsoft.com/en-us/library/89211k9b(v=vs.80).aspx )
- DPAPIProtectedConfigurationProvider を使用 (クライアント キーを使用):
- 長所: 鍵を手に入れるのが難しくなります...?? または、ユーザーがローカル管理者権限を持っている場合ではないかもしれません..?
- 短所: 接続文字列は、暗号化されたコンピューターでのみ復号化できます。クライアント マシンで暗号化する必要があります。アプリケーションを初めて実行するとき、または MSI を使用してインストールするときにカスタム アクションを使用するとき。どちらも、実行する前に確認する必要があることがわかっている場合、接続文字列を簡単に取得できます。
- RSAProtectedConfigurationProvider を使用 (提供されたキーを使用):
- 長所: 配布時にデータが暗号化される
- 短所: キーをどこかに保管する必要があり、侵害されやすくなります..?? ユーザーがローカル管理者権限を持っている限り、おそらく DPAPIProtectedConfigurationProvider との違いはありません..?
- DPAPIProtectedConfigurationProvider を使用 (クライアント キーを使用):
- Windows セキュリティの使用:
- 短所: ユーザーは、独自の資格情報を使用してデータベースに簡単に接続できます。したがって、これはオプションではありません。
- データ隠蔽:
- 短所: 例によってリバース エンジニアリングを行うときに、接続文字列を簡単に取得できます。これはスタンドアロンのオプションではありません。
- その他のオプション?
DPAPIProtectedConfigurationProvider を使用し、app.config の最初の実行時またはインストール時のカスタム アクションで接続文字列を暗号化することが提案されている多くの例を目にします。
まあ、最悪ではないオプションは、RSAProtectedConfigurationProvider を使用して、毎回生成されるカスタム RSA キーを使用して app.config を暗号化することだと思います (キーを毎回同じにするロジックを使用)。次に、このコードはすべて難読化されます。このようにして、暗号化された接続文字列を使用して app.config を配布できます。
資格情報は依然として危険にさらされる可能性があり、このシナリオでこれを 100% 回避する方法がないことはわかっています。最悪の選択肢を選ばないことがすべてです。
今、私はあなたの意見をいただければ幸いです...ありがとう!