方法 : データ ソース コントロールを使用するときに接続文字列をセキュリティ保護する

更新 : 2007 年 11 月

データ ソース コントロールを使用して作業する場合、接続文字列をアプリケーションの Web.config ファイルに配置して、使用する接続文字列の格納場所を集中化する必要があります。この方法には次の 2 つの利点があります。1 つの利点は、使用するデータ ソース コントロールが接続文字列をコントロールのプロパティとして格納せずに、構成ファイル内の接続文字列名を参照できることです。もう 1 つの利点は、接続文字列の管理が集中化されているので、接続文字列情報を変更した場合でも個別のページを修正する必要がなく、サイトを管理しやすくなることです。

このトピックでは、Visual Studio とデータ ソース コントロールを使用して接続文字列を Web.config ファイル内に配置する方法、コマンドライン ユーティリティ Aspnet_regiis.exe を使用してこれらの接続文字列を暗号化し、セキュリティを強化する方法について説明します。

データ ソース コントロールを使用して接続文字列を Web.config に追加する方法

  1. Visual Studio のデザイン ビューで .aspx ページを開きます。

  2. ツールボックスData フォルダから、デザイン サーフェイスに SqlDataSource コントロールなどのデータ ソース コントロールをドラッグします。

  3. コントロールを右クリックし、[スマート タグの表示] をクリックします。

  4. スマート タグ パネルで、[データ ソースの構成] をクリックします。

  5. [データ接続の選択] パネルの [新しい接続] をクリックします。

  6. [データ ソースの選択] ダイアログ ボックスの適切なデータ ソースをクリックし、[OK] をクリックします。

  7. [接続の追加] ダイアログ ボックスで正しいサーバー名、ユーザー名、およびパスワードを指定し、[OK] をクリックします。

    接続情報の概要が表示された [データ ソースの構成] ダイアログ ボックスに戻ります。

  8. [次へ] をクリックし、[はい] をクリックして、接続文字列を Web.config ファイルに保存します。

    接続文字列が Web.config ファイルに格納されます。コントロールのクエリの詳細を設定できます。

Web.config ファイルに格納された接続文字列情報を暗号化するには

  1. 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>
    

    後の手順で使用するためにコマンド プロンプトを開いたままにしておきます。

  2. 現在の 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);
    %>
    
    ms178372.alert_note(ja-jp,VS.90).gifメモ :

    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" です。

  3. コマンド プロンプトで次のオプションを指定して Aspnet_regiis.exe ツールを実行します。

    • -pa オプション。既定の RsaProtectedConfigurationProvider の RSA キー コンテナの名前を渡します。

    • 前の手順で確認した ASP.NET アプリケーションの ID。

    NETWORK SERVICE アカウントに、コンピュータ レベルの "NetFrameworkConfigurationKey" RSA キー コンテナへのアクセスを付与するコード例を次に示します。

    aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
    
  4. 暗号化された Web.config ファイルのコンテンツを復号化するには、-pd オプションを使用して aspnet_regiis.exe ツールを実行します。保護された構成プロバイダを指定しない点を除けば、この構文は、-pe オプションを使用して Web.config ファイルの内容を暗号化する場合と同じです。適切なプロバイダは、保護されたセクションの configProtectionProvider 属性内で識別されます。

    ASP.NET アプリケーション SampleApplication の connectionStrings 要素を復号化するコード例を次に示します。

    aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"
    

参照

その他の技術情報

保護された構成を使用した構成情報の暗号化