方法 : データ ソース コントロールを使用するときに接続文字列をセキュリティ保護する
更新 : 2007 年 11 月
データ ソース コントロールを使用して作業する場合、接続文字列をアプリケーションの Web.config ファイルに配置して、使用する接続文字列の格納場所を集中化する必要があります。この方法には次の 2 つの利点があります。1 つの利点は、使用するデータ ソース コントロールが接続文字列をコントロールのプロパティとして格納せずに、構成ファイル内の接続文字列名を参照できることです。もう 1 つの利点は、接続文字列の管理が集中化されているので、接続文字列情報を変更した場合でも個別のページを修正する必要がなく、サイトを管理しやすくなることです。
このトピックでは、Visual Studio とデータ ソース コントロールを使用して接続文字列を Web.config ファイル内に配置する方法、コマンドライン ユーティリティ Aspnet_regiis.exe を使用してこれらの接続文字列を暗号化し、セキュリティを強化する方法について説明します。
データ ソース コントロールを使用して接続文字列を Web.config に追加する方法
Visual Studio のデザイン ビューで .aspx ページを開きます。
ツールボックスの Data フォルダから、デザイン サーフェイスに SqlDataSource コントロールなどのデータ ソース コントロールをドラッグします。
コントロールを右クリックし、[スマート タグの表示] をクリックします。
スマート タグ パネルで、[データ ソースの構成] をクリックします。
[データ接続の選択] パネルの [新しい接続] をクリックします。
[データ ソースの選択] ダイアログ ボックスの適切なデータ ソースをクリックし、[OK] をクリックします。
[接続の追加] ダイアログ ボックスで正しいサーバー名、ユーザー名、およびパスワードを指定し、[OK] をクリックします。
接続情報の概要が表示された [データ ソースの構成] ダイアログ ボックスに戻ります。
[次へ] をクリックし、[はい] をクリックして、接続文字列を Web.config ファイルに保存します。
接続文字列が Web.config ファイルに格納されます。コントロールのクエリの詳細を設定できます。
Web.config ファイルに格納された接続文字列情報を暗号化するには
Windows のコマンド ラインで、次のオプションを指定して ASP.NET IIS 登録ツール (Aspnet_regiis.exe) を実行します。
-pe オプション。connectionStrings 要素を暗号化するための文字列 "connectionStrings" を渡します。
-app オプション。使用するアプリケーションの名前を渡します。
Aspnet_regiis.exe ツールは、%systemroot%\Microsoft.NET\Framework\versionNumber フォルダにあります。
SampleApplication という名前のアプリケーションに対する Web.config ファイルの connectionStrings セクションを暗号化するコード例を次に示します。
aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"
コマンドの実行が完了したら、Web.config ファイルの内容を確認できます。connectionStrings 構成セクションには、クリア テキスト接続文字列の代わりに、次のコード例で示すような暗号化された情報が格納されます。
<configuration> <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <KeyName>RSA Key </KeyName> </KeyInfo> <CipherData> <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo= </CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE= </CipherValue> </CipherData> </EncryptedData> </connectionStrings> </configuration>
後の手順で使用するためにコマンド プロンプトを開いたままにしておきます。
現在の WindowsIdentity 名を取得し、ASP.NET の実行に使用しているユーザー アカウントまたは ID を確認します。
WindowsIdentity 名を確認する 1 つの方法を表すコード例を次に示します。
<%@ Page Language="VB" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name) %>
<%@ Page Language="C#" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>
メモ : Windows Server 2003 上にある Web.config ファイルで ASP.NET アプリケーションの偽装が無効になっている場合、既定では、このアプリケーションの実行に使用される ID は NETWORK SERVICE アカウントです。その他のバージョンの Windows では、ASP.NET はローカルの ASPNET アカウントを使用して実行されます。
Web.config ファイルのセクションの暗号化と復号化を行うには、ASP.NET の実行に使用するユーザー アカウントまたは ID に暗号化キーの読み取りアクセス権を設定する必要があります。この手順では、Machine.config ファイルで指定された "RsaProtectedConfigurationProvider" という名前の既定の RsaProtectedConfigurationProvider を使用して Web サイトが設定されていることを前提としています。この既定の RsaProtectedConfigurationProvider で使用する RSA キー コンテナの名前は、"NetFrameworkConfigurationKey" です。
コマンド プロンプトで次のオプションを指定して Aspnet_regiis.exe ツールを実行します。
-pa オプション。既定の RsaProtectedConfigurationProvider の RSA キー コンテナの名前を渡します。
前の手順で確認した ASP.NET アプリケーションの ID。
NETWORK SERVICE アカウントに、コンピュータ レベルの "NetFrameworkConfigurationKey" RSA キー コンテナへのアクセスを付与するコード例を次に示します。
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
暗号化された Web.config ファイルのコンテンツを復号化するには、-pd オプションを使用して aspnet_regiis.exe ツールを実行します。保護された構成プロバイダを指定しない点を除けば、この構文は、-pe オプションを使用して Web.config ファイルの内容を暗号化する場合と同じです。適切なプロバイダは、保護されたセクションの configProtectionProvider 属性内で識別されます。
ASP.NET アプリケーション SampleApplication の connectionStrings 要素を復号化するコード例を次に示します。
aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"