私のwinformsアプリケーションでは、接続文字列をローカルレベルでハッシュしています。
しかし、ここでいくつか質問があります。
アプリが接続文字列を復号化した後、接続文字列情報はクリア テキストで送信されますか? そして、私のアプリはローカルにインストールされているので、真ん中にいるのはどのユーザーでしょうか?
追加の証明書が必要な「強制暗号化」オプション以外に、接続文字列を保護するにはどうすればよいですか?
私のwinformsアプリケーションでは、接続文字列をローカルレベルでハッシュしています。
しかし、ここでいくつか質問があります。
アプリが接続文字列を復号化した後、接続文字列情報はクリア テキストで送信されますか? そして、私のアプリはローカルにインストールされているので、真ん中にいるのはどのユーザーでしょうか?
追加の証明書が必要な「強制暗号化」オプション以外に、接続文字列を保護するにはどうすればよいですか?
ここでは、接続文字列を安全に保つことに関して、限られた量のアプローチしかありません。
1つのオプションとして、接続文字列がweb.configファイルまたはapp.configファイル(それぞれWebアプリとWindowsアプリの場合)に保存されている場合は、値を暗号化できます。これを行う方法を詳しく説明しているリンクをいくつか示します。
もちろん、あなたが正しく言うように、これはあなたが望むセキュリティを達成しないかもしれません。なぜなら、アプリケーションはユーザーのマシン上で実行されている可能性があり、したがってapp.configファイル(暗号化された状態でも)と関連する暗号化/復号化キーは、ユーザーのマシンでも使用できます。知識が豊富で意欲的なユーザーは、「プレーンテキスト」接続文字列にアクセスできます。
IMHO、データベース接続文字列がユーザーに表示されないようにするための最良の方法の1つは、暗号化されているかどうかに関係なく、そもそもデータベース接続文字列をユーザーに渡さないことです。これには、Windowsフォームアプリケーションが(接続文字列を使用して)データベースと直接通信するのではなく、(たとえば)Webサービスと直接通信する必要があります。
もちろん、WindowsフォームアプリケーションにWebサービスにアクセスできるURLを指定しますが、このWebサービスの使用は、ユーザー固有のユーザー名とパスワードの組み合わせでのみアクセスを許可することによって制限および制御されます。
このようにして、物理的に別のサーバー/マシンでWebサービスをホストできます(Webサービスである必要はありません。Windowsフォームのアプリケーションが.NETリモート処理またはWCFを介して通信するリモートアプリケーションである可能性があります)。このマシンを完全に制御し、境界セキュリティで保護します。
データベースの接続文字列にアクセスできるのは、この安全なマシンで実行しているアプリケーションとサービスであり、この接続文字列をこのマシンの境界の外に漏らして、完全に安全に保つ必要はありません(前述の境界を想定)セキュリティが整備されており、効果的です)。
もちろん、これらすべてを実装することは、ほぼ確実にアプリケーションに大きなアーキテクチャの変更を意味します。これは、アプリケーションのサイズと性質に応じて、価値がある場合とない場合がありますが、接続文字列をユーザー(またはユーザーのマシン)は、ユーザー(またはユーザーのマシン)が(暗号化または復号化された形式で)使用できないようにする必要があります。
暗号化された状態であっても、接続文字列をユーザーのマシンに配置するとすぐに、同じマシンにその暗号化された接続文字列を復号化する機能を与える必要があります。チェーンには弱いリンクがあり、(機知に富んだユーザーへ)プレーンテキストの接続文字列を決定できます。暗号化された接続文字列の復号化を別の(安全な)マシンにオフロードすることもできますが、これは前述のクライアントサーバーメカニズムのバリエーションであり、安全に保たれる部分(復号化キー、接続文字列など)が実行されます。あなた自身の安全な管理下にある別のマシンで。
接続文字列を保護することはできません。できることは、SSL セキュア チャネル経由で接続することです。
MSDN のこのページでは、接続に SSL を実装する方法について説明しています。
http://support.microsoft.com/kb/316898
そして、これはSQL認証(ASP.NET用)について説明しています:
http://msdn.microsoft.com/en-us/library/ff648340.aspx
ユーザー名とパスワードを暗号化するだけで本当に必要なようですか? その場合、Windows 認証をオプションにする必要があります (ただし、私はそれを機能させるのに問題があることがよくあります)。