接続文字列と構成ファイルConnection Strings and Configuration Files

接続文字列をアプリケーションのコードに組み込むと、セキュリティ上の脆弱性やメンテナンスの問題を引き起こす可能性があります。Embedding connection strings in your application's code can lead to security vulnerabilities and maintenance problems. アプリケーションのソース コード内にコンパイルされた暗号化されていない接続文字列は、Ildasm.exe (IL 逆アセンブラー) ツールを使用して参照することができます。Unencrypted connection strings compiled into an application's source code can be viewed using the Ildasm.exe (IL Disassembler) tool. さらに、接続文字列が変わるたびにアプリケーションを再コンパイルする必要性が生じます。Moreover, if the connection string ever changes, your application must be recompiled. そのため、接続文字列はアプリケーション構成ファイルに保存することをお勧めします。For these reasons, we recommend storing connection strings in an application configuration file.

アプリケーション構成ファイルの使用Working with Application Configuration Files

アプリケーション構成ファイルには、特定のアプリケーションに固有の設定が格納されます。Application configuration files contain settings that are specific to a particular application. たとえば、ASP.NET アプリケーションには少なくとも 1 つの web.config ファイルが存在するほか、Windows アプリケーションにも必要に応じて app.config ファイルを割り当てることができます。For example, an ASP.NET application can have one or more web.config files, and a Windows application can have an optional app.config file. 構成ファイルの名前と場所はアプリケーションのホストによって異なりますが、どの構成ファイルにも共通の要素があります。Configuration files share common elements, although the name and location of a configuration file vary depending on the application's host.

connectionStrings セクションThe connectionStrings Section

接続文字列は、アプリケーション構成ファイルのconnectionStrings 要素の configuration セクションにキーと値のペアとして格納できます。Connection strings can be stored as key/value pairs in the connectionStrings section of the configuration element of an application configuration file. 子要素には、addclear、および remove が存在します。Child elements include add, clear, and remove.

次の構成ファイル フラグメントは、接続文字列を格納するためのスキーマと構文の例を示しています。The following configuration file fragment demonstrates the schema and syntax for storing a connection string. name 属性は、実行時に取得する接続文字列を一意に識別するための名前です。The name attribute is a name that you provide to uniquely identify a connection string so that it can be retrieved at run time. providerName は、machine.config ファイルに登録された .NET Framework データ プロバイダーの不変名です。The providerName is the invariant name of the .NET Framework data provider, which is registered in the machine.config file.

<?xml version='1.0' encoding='utf-8'?>  
  <configuration>  
    <connectionStrings>  
      <clear />  
      <add name="Name"   
       providerName="System.Data.ProviderName"   
       connectionString="Valid Connection String;" />  
    </connectionStrings>  
  </configuration>  

注意

構成ファイルに接続文字列の一部を保存しておき、DbConnectionStringBuilder クラスを使用して実行時に補完できます。You can save part of a connection string in a configuration file and use the DbConnectionStringBuilder class to complete it at run time. 接続文字列の要素を事前に知ることができない場合や、機密情報を構成ファイルに保存したくない場合には有効な手段です。This is useful in scenarios where you do not know elements of the connection string ahead of time, or when you do not want to save sensitive information in a configuration file. 詳細については、「接続文字列ビルダー」をご覧ください。For more information, see Connection String Builders.

外部構成ファイルの使用Using External Configuration Files

外部構成ファイルとは、単一のセクションから成る、構成ファイルのフラグメントを含んだ独立したファイルを言います。External configuration files are separate files that contain a fragment of a configuration file consisting of a single section. 外部構成ファイルは、メインの構成ファイルによって参照されます。The external configuration file is then referenced by the main configuration file. connectionStrings セクションを物理的に分かれたファイルに保存できるため、アプリケーションの配置後に接続文字列を編集する場合に有効な手段です。Storing the connectionStrings section in a physically separate file is useful in situations where connection strings may be edited after the application is deployed. たとえば、構成ファイルに修正が加えられた場合、ASP.NET の標準的な動作ではアプリケーション ドメインが再起動され、その結果、状態情報が失われてしまいます。For example, the standard ASP.NET behavior is to restart an application domain when configuration files are modified, which results in state information being lost. しかし、外部構成ファイルに対する修正であればアプリケーションの再起動は伴いません。However, modifying an external configuration file does not cause an application restart. 外部構成ファイルは ASP.NET だけでなく、Windows アプリケーションでも使用できます。External configuration files are not limited to ASP.NET; they can also be used by Windows applications. また、ファイルのアクセス セキュリティや権限を使用して、外部構成ファイルへのアクセスを制限することもできます。In addition, file access security and permissions can be used to restrict access to external configuration files. 実行時における外部構成ファイルの使用は透過的であり、特殊なコーディングも不要です。Working with external configuration files at run time is transparent, and requires no special coding.

外部構成ファイルに接続文字列を保存するには、connectionStrings セクションだけを含んだファイルを別途作成します。To store connection strings in an external configuration file, create a separate file that contains only the connectionStrings section. それ以外の要素、セクション、または属性は含めないでください。Do not include any additional elements, sections, or attributes. 外部構成ファイルの構文の例を次に示します。This example shows the syntax for an external configuration file.

<connectionStrings>  
  <add name="Name"   
   providerName="System.Data.ProviderName"   
   connectionString="Valid Connection String;" />  
</connectionStrings>  

外部ファイルの完全修飾名および場所は、メインのアプリケーション構成ファイルの configSource 属性で指定します。In the main application configuration file, you use the configSource attribute to specify the fully qualified name and location of the external file. この例では、connections.config という名前の外部構成ファイルを参照しています。This example refers to an external configuration file named connections.config.

<?xml version='1.0' encoding='utf-8'?>  
<configuration>  
    <connectionStrings configSource="connections.config"/>  
</configuration>  

接続文字列の実行時の取得Retrieving Connection Strings at Run Time

.NET Framework 2.0 では、System.Configuration 名前空間に新しいクラスが導入され、実行時に簡単に構成ファイルから接続文字列を取得できるようになりました。The .NET Framework 2.0 introduced new classes in the System.Configuration namespace to simplify retrieving connection strings from configuration files at run time. プログラムから名前またはプロバイダー名を使用して接続文字列を取得できます。You can programmatically retrieve a connection string by name or by provider name.

注意

connectionStrings セクションは、machine.config ファイルにも存在します。このセクションには、Visual Studio によって使用される接続文字列が格納されます。The machine.config file also contains a connectionStrings section, which contains connection strings used by Visual Studio. Windows アプリケーションの app.config ファイルからプロバイダー名で接続文字列を取得した場合、まず machine.config 内の接続文字列が読み込まれ、その後、app.config のエントリが読み込まれます。connectionStrings 要素の直後に clear を追加すると、継承されたすべての参照がメモリ内のデータ構造から削除され、ローカルの app.config ファイルに定義されている接続文字列だけが考慮されます。When retrieving connection strings by provider name from the app.config file in a Windows application, the connection strings in machine.config get loaded first, and then the entries from app.config. Adding clear immediately after the connectionStrings element removes all inherited references from the data structure in memory, so that only the connection strings defined in the local app.config file are considered.

構成クラスの使用Working with the Configuration Classes

.NET Framework 2.0 以降では、ローカル コンピューター上の構成ファイルで作業するときに、非推奨とされた ConfigurationManager に代わって ConfigurationSettings を使用します。Starting with the .NET Framework 2.0, ConfigurationManager is used when working with configuration files on the local computer, replacing the deprecated ConfigurationSettings. ASP.NET 構成ファイルでの作業では、WebConfigurationManager を使用します。WebConfigurationManager is used to work with ASP.NET configuration files. Web サーバー上の構成ファイルを扱うことを目的に設計され、system.web など、構成ファイルのセクションにプログラムからアクセスできます。It is designed to work with configuration files on a Web server, and allows programmatic access to configuration file sections such as system.web.

注意

実行時に構成ファイルにアクセスするには、呼び出し元に権限を付与する必要があります。必要な権限は、アプリケーションの種類、構成ファイル、格納場所などによって異なります。Accessing configuration files at run time requires granting permissions to the caller; the required permissions depend on the type of application, configuration file, and location. 詳細については、「構成クラスの使用」、および ASP.NET アプリケーションには、「WebConfigurationManager」および Windows アプリケーションには、「ConfigurationManager」を参照してください。For more information, see Using the Configuration Classes and WebConfigurationManager for ASP.NET applications, and ConfigurationManager for Windows applications.

ConnectionStringSettingsCollection を使用すると、アプリケーション構成ファイルから接続文字列を取得できます。You can use the ConnectionStringSettingsCollection to retrieve connection strings from application configuration files. このコレクションには、それぞれが connectionStrings セクションの単一のエントリを表す一連の ConnectionStringSettings オブジェクトが格納されます。It contains a collection of ConnectionStringSettings objects, each of which represents a single entry in the connectionStrings section. 個々のプロパティは接続文字列の属性にマップされており、名前またはプロバイダー名を指定することによって接続文字列を取得できます。Its properties map to connection string attributes, allowing you to retrieve a connection string by specifying the name or the provider name.

プロパティProperty 説明Description
Name 接続文字列の名前。The name of the connection string. name 属性にマップされています。Maps to the name attribute.
ProviderName プロバイダーの完全修飾名。The fully qualified provider name. providerName 属性にマップされています。Maps to the providerName attribute.
ConnectionString 接続文字列。The connection string. connectionString 属性にマップされています。Maps to the connectionString attribute.

例 : すべての接続文字列を一覧表示するExample: Listing All Connection Strings

この例では、ConnectionStringSettings コレクションを反復処理しながら、NameProviderNameConnectionString の各プロパティをコンソール ウィンドウに表示します。This example iterates through the ConnectionStringSettings collection and displays the Name, ProviderName, and ConnectionString properties in the console window.

注意

プロジェクトの種類によっては System.Configuration.dll がインクルードされていない場合があります。構成クラスを使用する場合は、必要に応じて参照設定するようにしてください。System.Configuration.dll is not included in all project types, and you may need to set a reference to it in order to use the configuration classes. 特定のアプリケーションの構成ファイルの名前と場所は、アプリケーションの種類やホストしているプロセスによって異なります。The name and location of a particular application configuration file varies by the type of application and the hosting process.

using System.Configuration;

class Program
{
    static void Main()
    {
        GetConnectionStrings();
        Console.ReadLine();
    }

    static void GetConnectionStrings()
    {
        ConnectionStringSettingsCollection settings =
            ConfigurationManager.ConnectionStrings;

        if (settings != null)
        {
            foreach(ConnectionStringSettings cs in settings)
            {
                Console.WriteLine(cs.Name);
                Console.WriteLine(cs.ProviderName);
                Console.WriteLine(cs.ConnectionString);
            }
        }
    }
}
Imports System.Configuration

Class Program
    Shared Sub Main()
        GetConnectionStrings()
        Console.ReadLine()
    End Sub

    Private Shared Sub GetConnectionStrings()

        Dim settings As ConnectionStringSettingsCollection = _
            ConfigurationManager.ConnectionStrings

        If Not settings Is Nothing Then
            For Each cs As ConnectionStringSettings In settings
                Console.WriteLine(cs.Name)
                Console.WriteLine(cs.ProviderName)
                Console.WriteLine(cs.ConnectionString)
            Next
        End If
    End Sub
End Class

例 : 接続文字列を名前で取得するExample: Retrieving a Connection String by Name

次の例では、接続文字列の名前を指定することによって、接続文字列を構成ファイルから取得する方法を説明します。This example demonstrates how to retrieve a connection string from a configuration file by specifying its name. このコードでは、指定された入力パラメーターと ConnectionStringSettings の名前とを照合することによって、ConnectionStrings オブジェクトを作成します。The code creates a ConnectionStringSettings object, matching the supplied input parameter to the ConnectionStrings name. 一致する名前が見つからなかった場合は null (Visual Basic の場合は Nothing) が返されます。If no matching name is found, the function returns null (Nothing in Visual Basic).

// Retrieves a connection string by name.
// Returns null if the name is not found.
static string GetConnectionStringByName(string name)
{
    // Assume failure.
    string returnValue = null;

    // Look for the name in the connectionStrings section.
    ConnectionStringSettings settings =
        ConfigurationManager.ConnectionStrings[name];

    // If found, return the connection string.
    if (settings != null)
        returnValue = settings.ConnectionString;

    return returnValue;
}
' Retrieves a connection string by name.
' Returns Nothing if the name is not found.
Private Shared Function GetConnectionStringByName( _
    ByVal name As String) As String

    ' Assume failure
    Dim returnValue As String = Nothing

    ' Look for the name in the connectionStrings section.
    Dim settings As ConnectionStringSettings = _
       ConfigurationManager.ConnectionStrings(name)

    ' If found, return the connection string.
    If Not settings Is Nothing Then
        returnValue = settings.ConnectionString
    End If

    Return returnValue
End Function

例 : 接続文字列をプロバイダー名で取得するExample: Retrieving a Connection String by Provider Name

次の例では、プロバイダーの不変名を System.Data.ProviderName の形式で指定することによって接続文字列を取得する方法を説明します。This example demonstrates how to retrieve a connection string by specifying the provider-invariant name in the format System.Data.ProviderName. このコードでは、ConnectionStringSettingsCollection を反復処理し、最初に見つかった ProviderName の接続文字列を返します。The code iterates through the ConnectionStringSettingsCollection and returns the connection string for the first ProviderName found. プロバイダー名が見つからなかった場合は null (Visual Basic の場合は Nothing) が返されます。If the provider name is not found, the function returns null (Nothing in Visual Basic).

// Retrieve a connection string by specifying the providerName.
// Assumes one connection string per provider in the config file.
static string GetConnectionStringByProvider(string providerName)
{
    // Return null on failure.
    string returnValue = null;

    // Get the collection of connection strings.
    ConnectionStringSettingsCollection settings =
        ConfigurationManager.ConnectionStrings;

    // Walk through the collection and return the first 
    // connection string matching the providerName.
    if (settings != null)
    {
        foreach (ConnectionStringSettings cs in settings)
        {
            if (cs.ProviderName == providerName)
                returnValue = cs.ConnectionString;
            break;
        }
    }
    return returnValue;
}
' Retrieve a connection string by specifying the providerName.
' Assumes one connection string per provider in the config file.
Private Shared Function GetConnectionStringByProvider( _
    ByVal providerName As String) As String

    'Return Nothing on failure.
    Dim returnValue As String = Nothing

    ' Get the collection of connection strings.
    Dim settings As ConnectionStringSettingsCollection = _
        ConfigurationManager.ConnectionStrings

    ' Walk through the collection and return the first 
    ' connection string matching the providerName.
    If Not settings Is Nothing Then
        For Each cs As ConnectionStringSettings In settings
            If cs.ProviderName = providerName Then
                returnValue = cs.ConnectionString
                Exit For
            End If
        Next
    End If

    Return returnValue
End Function

保護構成を使った構成ファイル セクションの暗号化Encrypting Configuration File Sections Using Protected Configuration

ASP.NET 2.0 では、保護構成と呼ばれる、構成ファイルの機密情報を暗号化するための新しい機能が導入されました。ASP.NET 2.0 introduced a new feature, called protected configuration, that enables you to encrypt sensitive information in a configuration file. 保護構成は、主に ASP.NET を想定して設計されたものですが、Windows アプリケーションの構成ファイル セクションを暗号化する目的でも使用できます。Although primarily designed for ASP.NET, protected configuration can also be used to encrypt configuration file sections in Windows applications. 保護構成機能の詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。For a detailed description of the protected configuration capabilities, see Encrypting Configuration Information Using Protected Configuration.

次の構成ファイル フラグメントは、暗号化後の connectionStrings セクションを示しています。The following configuration file fragment shows the connectionStrings section after it has been encrypted. configProtectionProvider には、接続文字列の暗号化と復号化に使用される、保護構成プロバイダーが指定されています。The configProtectionProvider specifies the protected configuration provider used to encrypt and decrypt the connection strings. EncryptedData セクションには暗号文が格納されています。The EncryptedData section contains the cipher text.

<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">  
  <EncryptedData>  
    <CipherData>  
      <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>  
    </CipherData>  
  </EncryptedData>  
</connectionStrings>  

暗号化された接続文字列は実行時に取得されることになります。このとき、.NET Framework は、指定されたプロバイダーを使用して CipherValue を復号化し、アプリケーションに利用可能な接続文字列を提供します。When the encrypted connection string is retrieved at run time, the .NET Framework uses the specified provider to decrypt the CipherValue and make it available to your application. 復号化のプロセスを管理するためのコードを自分で作成する必要はありません。You do not need to write any additional code to manage the decryption process.

保護構成プロバイダーProtected Configuration Providers

保護構成プロバイダーは、ローカル コンピューターの machine.config ファイルの configProtectedData セクションに登録されます。次のフラグメントを見ると、.NET Framework が備えている 2 つの保護構成プロバイダーが指定されていることがわかります。Protected configuration providers are registered in the configProtectedData section of the machine.config file on the local computer, as shown in the following fragment, which shows the two protected configuration providers supplied with the .NET Framework. ここでは、読みやすくするために一部の値を省略しています。The values shown here have been truncated for readability.

<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">  
  <providers>  
    <add name="RsaProtectedConfigurationProvider"   
      type="System.Configuration.RsaProtectedConfigurationProvider, ... />  
    <add name="DataProtectionConfigurationProvider"   
      type="System.Configuration.DpapiProtectedConfigurationProvider, ... />  
  </providers>  
</configProtectedData>  

別の保護構成プロバイダーが必要な場合は、それを machine.config ファイルに追加することによって構成できます。 また、ProtectedConfigurationProvider 抽象基本クラスを継承することで、保護構成プロバイダーを独自に作成することもできます。 次の表は、.NET Framework に含まれている 2 つの構成プロバイダーを示しています。The following table describes the two configuration files included with the .NET Framework.

プロバイダーProvider 説明Description
RsaProtectedConfigurationProvider データの暗号化と復号化には、RSA 暗号化アルゴリズムが使用されます。Uses the RSA encryption algorithm to encrypt and decrypt data. RSA アルゴリズムは、公開キー暗号化だけでなく、デジタル署名にも使用されます。The RSA algorithm can be used for both public key encryption and digital signatures. "公開キー" として知られているほか、2 つの異なるキーが使用されることから非対称暗号化と呼ばれる場合もあります。It is also known as "public key" or asymmetrical encryption because it employs two different keys. ASP.NET IIS 登録ツール (Aspnet_regiis.exe) を使用すると、Web.config ファイルのセクションを暗号化したり、暗号化キーを管理したりすることができます。You can use the ASP.NET IIS Registration Tool (Aspnet_regiis.exe) to encrypt sections in a Web.config file and manage the encryption keys. 構成ファイルは、その処理時に ASP.NET によって復号化されます。ASP.NET decrypts the configuration file when it processes the file. ASP.NET アプリケーションの ID には、セクションの暗号化と復号化に使用される暗号化キーへの読み取りアクセスが必要です。The identity of the ASP.NET application must have read access to the encryption key that is used to encrypt and decrypt the encrypted sections.
DpapiProtectedConfigurationProvider 構成セクションの暗号化に Windows Data Protection API (DPAPI) が使用されます。Uses the Windows Data Protection API (DPAPI) to encrypt configuration sections. この API には、Windows の組み込み暗号化サービスが使用され、コンピューター単位またはユーザー アカウント単位の保護を構成できます。It uses the Windows built-in cryptographic services and can be configured for either machine-specific or user-account-specific protection. コンピューター単位の保護は、同じサーバー上の複数のアプリケーションで情報を共有する必要がある場合に使用します。Machine-specific protection is useful for multiple applications on the same server that need to share information. 共有ホスティング環境など、特定のユーザー ID で実行されるサービスには、ユーザー アカウント単位の保護を使用できます。User-account-specific protection can be used with services that run with a specific user identity, such as a shared hosting environment. 各アプリケーションは、ファイルやデータベースなど、各種リソースへのアクセスが制限された別々の ID で実行されます。Each application runs under a separate identity which restricts access to resources such as files and databases.

どちらのプロバイダーも、強力なデータ暗号化機能を備えています。Both providers offer strong encryption of data. ただし、Web ファームなど、複数のサーバーで、同じ構成ファイルを暗号化して使用する場合、データの暗号化に使用される暗号化キーをエクスポートしたり、それを別のサーバーにインポートしたりできるのは、RsaProtectedConfigurationProvider だけです。However, if you are planning to use the same encrypted configuration file on multiple servers, such as a Web farm, only the RsaProtectedConfigurationProvider enables you to export the encryption keys used to encrypt the data and import them on another server. 詳細については、「保護された構成 RSA キー コンテナのインポートとエクスポート」を参照してください。For more information, see Importing and Exporting Protected Configuration RSA Key Containers.

構成クラスの使用Using the Configuration Classes

System.Configuration 名前空間には、構成設定をプログラムから行うためのクラスが存在します。The System.Configuration namespace provides classes to work with configuration settings programmatically. ConfigurationManager クラスは、コンピューター、アプリケーション、ユーザーの各構成ファイルへのアクセスを提供します。The ConfigurationManager class provides access to machine, application, and user configuration files. ASP.NET アプリケーションを作成している場合は、同じ機能を持った WebConfigurationManager クラスを使用します。他にも <system.web> の設定など、ASP.NET アプリケーション固有の設定にもアクセスできます。If you are creating an ASP.NET application, you can use the WebConfigurationManager class, which provides the same functionality while also allowing you to access settings that are unique to ASP.NET applications, such as those found in <system.web>.

注意

System.Security.Cryptography 名前空間には、データの暗号化と復号化に関連した補足的なオプションを提供するクラスが存在します。The System.Security.Cryptography namespace contains classes that provide additional options for encrypting and decrypting data. これらのクラスは、保護構成では利用できない暗号化サービスが必要な場合に使用します。Use these classes if you require cryptographic services that are not available using protected configuration. これらのクラスは必ずしも純粋なマネージ実装とは限らず、アンマネージ Microsoft CryptoAPI 用のラッパーもあります。Some of these classes are wrappers for the unmanaged Microsoft CryptoAPI, while others are purely managed implementations. 詳細については、「暗号サービス」をご覧ください。For more information, see Cryptographic Services.

App.config の例App.config Example

ここでは、Windows アプリケーションの app.config ファイルにある connectionStrings セクションを条件に応じて暗号化したり復号化したりする方法を紹介します。This example demonstrates how to toggle encrypting the connectionStrings section in an app.config file for a Windows application. この例に示したプロシージャは、MyApplication.exe など、アプリケーションの名前を引数として受け取ります。In this example, the procedure takes the name of the application as an argument, for example, "MyApplication.exe". その後、app.config ファイルを暗号化して、その実行可能ファイルと同じフォルダーに MyApplication.exe.config という名前でコピーします。The app.config file will then be encrypted and copied to the folder that contains the executable under the name of "MyApplication.exe.config".

注意

接続文字列は暗号化したときと同じコンピューターでしか復号化できません。The connection string can only be decrypted on the computer on which it was encrypted.

このコードは、OpenExeConfiguration メソッドを使用して app.config ファイルを編集モードで開き、GetSection メソッドを使用して connectionStrings セクションを返します。The code uses the OpenExeConfiguration method to open the app.config file for editing, and the GetSection method returns the connectionStrings section. さらに、IsProtected プロパティをチェックし、セクションがまだ暗号化されていなければ、ProtectSection を呼び出して暗号化します。The code then checks the IsProtected property, calling the ProtectSection to encrypt the section if it is not encrypted. それ以外の場合は、UnprotectSection メソッドを呼び出してセクションを復号化します。The UnprotectSection method is invoked to decrypt the section. 最後に、Save メソッドで操作を完了し、変更内容を保存します。The Save method completes the operation and saves the changes.

注意

このコードを実行するには、プロジェクトで System.Configuration.dll を参照設定する必要があります。You must set a reference to System.Configuration.dll in your project for the code to run.

static void ToggleConfigEncryption(string exeConfigName)
{
    // Takes the executable file name without the
    // .config extension.
    try
    {
        // Open the configuration file and retrieve 
        // the connectionStrings section.
        Configuration config = ConfigurationManager.
            OpenExeConfiguration(exeConfigName);

        ConnectionStringsSection section =
            config.GetSection("connectionStrings")
            as ConnectionStringsSection;

        if (section.SectionInformation.IsProtected)
        {
            // Remove encryption.
            section.SectionInformation.UnprotectSection();
        }
        else
        {
            // Encrypt the section.
            section.SectionInformation.ProtectSection(
                "DataProtectionConfigurationProvider");
        }
        // Save the current configuration.
        config.Save();

        Console.WriteLine("Protected={0}",
            section.SectionInformation.IsProtected);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
Shared Sub ToggleConfigEncryption(ByVal exeConfigName As String)
    ' Takes the executable file name without the
    ' .config extension.
    Try
        ' Open the configuration file and retrieve 
        ' the connectionStrings section.
        Dim config As Configuration = ConfigurationManager. _
            OpenExeConfiguration(exeConfigName)

        Dim section As ConnectionStringsSection = DirectCast( _
            config.GetSection("connectionStrings"), _
            ConnectionStringsSection)

        If section.SectionInformation.IsProtected Then
            ' Remove encryption.
            section.SectionInformation.UnprotectSection()
        Else
            ' Encrypt the section.
            section.SectionInformation.ProtectSection( _
              "DataProtectionConfigurationProvider")
        End If

        ' Save the current configuration.
        config.Save()

        Console.WriteLine("Protected={0}", _
        section.SectionInformation.IsProtected)

    Catch ex As Exception
        Console.WriteLine(ex.Message)
    End Try
End Sub

Web.config の例Web.config Example

この例では、OpenWebConfigurationWebConfigurationManager メソッドを使用しています。This example uses the OpenWebConfiguration method of the WebConfigurationManager. この場合、チルダを使用して、Web.config ファイルの相対パスを指定できる点に注目してください。Note that in this case you can supply the relative path to the Web.config file by using a tilde. このコードを実行するには、System.Web.Configuration クラスへの参照が必要です。The code requires a reference to the System.Web.Configuration class.

static void ToggleWebEncrypt()
{
    // Open the Web.config file.
    Configuration config = WebConfigurationManager.
        OpenWebConfiguration("~");

    // Get the connectionStrings section.
    ConnectionStringsSection section =
        config.GetSection("connectionStrings")
        as ConnectionStringsSection;

    // Toggle encryption.
    if (section.SectionInformation.IsProtected)
    {
        section.SectionInformation.UnprotectSection();
    }
    else
    {
        section.SectionInformation.ProtectSection(
            "DataProtectionConfigurationProvider");
    }

    // Save changes to the Web.config file.
    config.Save();
}
Shared Sub ToggleWebEncrypt()
    ' Open the Web.config file.
    Dim config As Configuration = WebConfigurationManager. _
      OpenWebConfiguration("~")

    ' Get the connectionStrings section.
    Dim section As ConnectionStringsSection = DirectCast( _
        config.GetSection("connectionStrings"), _
        ConnectionStringsSection)

    ' Toggle encryption.
    If section.SectionInformation.IsProtected Then
        section.SectionInformation.UnprotectSection()
    Else
        section.SectionInformation.ProtectSection( _
          "DataProtectionConfigurationProvider")
    End If

    ' Save changes to the Web.config file.
    config.Save()
End Sub

ASP.NET アプリケーションのセキュリティ保護の詳細については、「ASP.NET Web サイトのセキュリティ」および ASP.NET デベロッパー センターの「ASP.NET 2.0 のセキュリティ プラクティス」を参照してください。For more information securing ASP.NET applications, see NIB: ASP.NET Security and ASP.NET 2.0 Security Practices at a Glance on the ASP.NET Developer Center.

参照See Also

接続文字列ビルダーConnection String Builders
接続情報の保護Protecting Connection Information
構成クラスの使用Using the Configuration Classes
アプリの構成Configuring Apps
ASP.NET Web サイト管理ASP.NET Web Site Administration
ADO.NET のマネージ プロバイダーと DataSet デベロッパー センターADO.NET Managed Providers and DataSet Developer Center