Cadenas de conexión y archivos de configuraciónConnection Strings and Configuration Files

La incrustación de cadenas de conexión en el código de la aplicación puede producir vulnerabilidades en la seguridad y problemas de mantenimiento.Embedding connection strings in your application's code can lead to security vulnerabilities and maintenance problems. Las cadenas de conexión sin cifrar compiladas en el código fuente de una aplicación se pueden ver con la herramienta Ildasm.exe (Desensamblador de IL).Unencrypted connection strings compiled into an application's source code can be viewed using the Ildasm.exe (IL Disassembler) tool. Además, si la cadena de conexión cambia en algún momento, será necesario compilar de nuevo la aplicación.Moreover, if the connection string ever changes, your application must be recompiled. Por estas razones, se recomienda almacenar las cadenas de conexión en un archivo de configuración de la aplicación.For these reasons, we recommend storing connection strings in an application configuration file.

Trabajar con archivos de configuración de la aplicaciónWorking with Application Configuration Files

Los archivos de configuración de la aplicación contienen valores específicos de una aplicación determinada.Application configuration files contain settings that are specific to a particular application. Por ejemplo, una aplicación ASP.NET puede tener uno o varios archivos web.config y una aplicación Windows puede tener un archivo app.config opcional.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. Los archivos de configuración comparten elementos comunes, aunque su nombre y ubicación varían en función del host de la aplicación.Configuration files share common elements, although the name and location of a configuration file vary depending on the application's host.

Sección connectionStringsThe connectionStrings Section

Las cadenas de conexión se pueden almacenar como pares clave-valor en la sección connectionStrings del elemento configuration en el archivo de configuración de una aplicación.Connection strings can be stored as key/value pairs in the connectionStrings section of the configuration element of an application configuration file. Los elementos secundarios incluyen add, clear y remove.Child elements include add, clear, and remove.

El siguiente fragmento del archivo de configuración muestra el esquema y la sintaxis para almacenar una cadena de conexión.The following configuration file fragment demonstrates the schema and syntax for storing a connection string. El atributo name es un nombre que se proporciona para identificar de forma única una cadena de conexión, de forma que se pueda recuperar en tiempo de ejecución.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 es el nombre invariable del proveedor de datos de .NET Framework registrado en el archivo machine.config.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>  

Nota

Puede guardar parte de la cadena de conexión en un archivo de configuración y usar la clase DbConnectionStringBuilder para completarla en tiempo de ejecución.You can save part of a connection string in a configuration file and use the DbConnectionStringBuilder class to complete it at run time. Esto resulta útil en escenarios en los que no se conocen los elementos de la cadena de conexión por anticipado o cuando no desea guardar información confidencial en un archivo de configuración.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. Para obtener más información, vea Generadores de cadenas de conexión.For more information, see Connection String Builders.

Uso de archivos de configuración externosUsing External Configuration Files

Los archivos de configuración externos son archivos independientes que contienen un fragmento de un archivo de configuración compuesto de una sola sección.External configuration files are separate files that contain a fragment of a configuration file consisting of a single section. El archivo de configuración principal hace referencia al archivo de configuración externo.The external configuration file is then referenced by the main configuration file. El almacenamiento de la sección connectionStrings en un archivo físicamente independiente resulta útil en situaciones en las que es posible que se editen las cadenas de conexión después de implementar la aplicación.Storing the connectionStrings section in a physically separate file is useful in situations where connection strings may be edited after the application is deployed. Por ejemplo, si se modifican los archivos de configuración, ASP.NET reinicia de forma predeterminada el dominio de la aplicación, lo que provoca la pérdida de la información de estado.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. Sin embargo, la modificación de un archivo de configuración externo no provoca el reinicio de la aplicación.However, modifying an external configuration file does not cause an application restart. Los archivos de configuración externos no se limitan a ASP.NET; también se pueden utilizar en aplicaciones Windows.External configuration files are not limited to ASP.NET; they can also be used by Windows applications. Además, la seguridad y permisos de acceso a los archivos se pueden usar para restringir el acceso a los archivos de configuración externos.In addition, file access security and permissions can be used to restrict access to external configuration files. El trabajo con archivos de configuración externos en tiempo de ejecución es transparente y no requiere código especial.Working with external configuration files at run time is transparent, and requires no special coding.

Para almacenar las cadenas de conexión en un archivo de configuración externo, cree un archivo independiente que contenga únicamente la sección connectionStrings.To store connection strings in an external configuration file, create a separate file that contains only the connectionStrings section. No incluya elementos, secciones ni atributos adicionales.Do not include any additional elements, sections, or attributes. En este ejemplo se muestra la sintaxis de un archivo de configuración externo.This example shows the syntax for an external configuration file.

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

En el archivo de configuración principal de la aplicación, use el atributo configSource para especificar el nombre completo y la ubicación del archivo externo.In the main application configuration file, you use the configSource attribute to specify the fully qualified name and location of the external file. En este ejemplo se hace referencia a un archivo de configuración externo denominado 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>  

Recuperar cadenas de conexión en tiempo de ejecuciónRetrieving Connection Strings at Run Time

.NET Framework 2.0 incorpora nuevas clases en el espacio de nombres System.Configuration para simplificar la recuperación de las cadenas de conexión de los archivos de configuración en tiempo de ejecución.The .NET Framework 2.0 introduced new classes in the System.Configuration namespace to simplify retrieving connection strings from configuration files at run time. La cadena de conexión se puede recuperar mediante programación con el nombre de la cadena o el nombre de proveedor.You can programmatically retrieve a connection string by name or by provider name.

Nota

El archivo machine.config también contiene una sección connectionStrings, donde se encuentran las cadenas de conexión que usa Visual Studio.The machine.config file also contains a connectionStrings section, which contains connection strings used by Visual Studio. Al recuperar cadenas de conexión mediante el nombre del proveedor del archivo app.config en una aplicación Windows, primero se cargan las cadenas de conexión de machine.config y, después, las entradas de app.config. Si se agrega clear inmediatamente después del elemento connectionStrings, se quitan todas las referencias heredadas de la estructura de datos en memoria, de forma que solo se tendrán en cuenta las cadenas de conexión definidas en el archivo app.config local.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.

Trabajar con clases de configuraciónWorking with the Configuration Classes

A partir de .NET Framework 2.0, se usa el elemento ConfigurationManager al trabajar con archivos de configuración en el equipo local, reemplazando al elemento en desuso ConfigurationSettings.Starting with the .NET Framework 2.0, ConfigurationManager is used when working with configuration files on the local computer, replacing the deprecated ConfigurationSettings. WebConfigurationManager se usa para trabajar con archivos de configuración de ASP.NET.WebConfigurationManager is used to work with ASP.NET configuration files. Esta característica se ha diseñado para trabajar con archivos de configuración en un servidor web y permite el acceso mediante programación a secciones del archivo de configuración como 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.

Nota

El acceso a los archivos de configuración en tiempo de ejecución requiere la concesión de permisos al llamador; los permisos necesarios dependen del tipo de aplicación, del archivo de configuración y de la ubicación.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. Para obtener más información, vea Utilizar las clases Configuration y WebConfigurationManager para las aplicaciones ASP.NET, o bien ConfigurationManager para las aplicaciones Windows.For more information, see Using the Configuration Classes and WebConfigurationManager for ASP.NET applications, and ConfigurationManager for Windows applications.

Puede usar ConnectionStringSettingsCollection para recuperar cadenas de conexión de archivos de configuración de aplicación.You can use the ConnectionStringSettingsCollection to retrieve connection strings from application configuration files. Esta clase contiene una colección de objetos ConnectionStringSettings, cada uno de los cuales representa una única entrada en la sección connectionStrings.It contains a collection of ConnectionStringSettings objects, each of which represents a single entry in the connectionStrings section. Sus propiedades se asignan a los atributos de cadenas de conexión, lo que permite recuperar una cadena de conexión mediante la especificación de su nombre o del nombre del proveedor.Its properties map to connection string attributes, allowing you to retrieve a connection string by specifying the name or the provider name.

PropiedadProperty DESCRIPCIÓNDescription
Name Nombre de la cadena de conexión.The name of the connection string. Se asigna al atributo name.Maps to the name attribute.
ProviderName Nombre completo del proveedor.The fully qualified provider name. Se asigna al atributo providerName.Maps to the providerName attribute.
ConnectionString La cadena de conexión.The connection string. Se asigna al atributo connectionString.Maps to the connectionString attribute.

Ejemplo: Enumerar todas las cadenas de conexiónExample: Listing All Connection Strings

En este ejemplo se recorre ConnectionStringSettingsCollection en iteración ConnectionStringSettings.Namey se muestran ConnectionStringSettings.ConnectionString las propiedades, ConnectionStringSettings.ProviderNamey en la ventana de la consola.This example iterates through the ConnectionStringSettingsCollection and displays the ConnectionStringSettings.Name, ConnectionStringSettings.ProviderName, and ConnectionStringSettings.ConnectionString properties in the console window.

Nota

System.Configuration.dll no se incluye en todos los tipos de proyectos y es posible que deba establecer una referencia a este elemento para usar las clases de configuración.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. El nombre y la ubicación de un archivo de configuración de aplicación determinado varían en función del tipo de aplicación y del proceso de hospedaje.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

Ejemplo: Recuperación de una cadena de conexión por nombreExample: Retrieving a Connection String by Name

El siguiente ejemplo muestra cómo recuperar una cadena de conexión de un archivo de configuración mediante la especificación del nombre.This example demonstrates how to retrieve a connection string from a configuration file by specifying its name. El código crea un objeto ConnectionStringSettings, de forma que el parámetro de entrada proporcionado coincida con el nombre de ConnectionStrings.The code creates a ConnectionStringSettings object, matching the supplied input parameter to the ConnectionStrings name. Si no se encuentra una coincidencia de nombre, la función devuelve null (Nothing en Visual Basic).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

Ejemplo: Recuperar una cadena de conexión por el nombre de proveedorExample: Retrieving a Connection String by Provider Name

En este ejemplo se muestra cómo recuperar una cadena de conexión mediante la especificación del nombre invariable de proveedor con el formato Sistema.Datos.NombreDelProveedor.This example demonstrates how to retrieve a connection string by specifying the provider-invariant name in the format System.Data.ProviderName. El código recorre en iteración ConnectionStringSettingsCollection y devuelve la cadena de conexión del primer valor de ProviderName encontrado.The code iterates through the ConnectionStringSettingsCollection and returns the connection string for the first ProviderName found. Si no se encuentra el nombre del proveedor, la función devuelve null (Nothing en Visual Basic).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

Cifrar secciones del archivo de configuración mediante una configuración protegidaEncrypting Configuration File Sections Using Protected Configuration

En ASP.NET 2.0 se incorporó una característica nueva denominada configuración protegida, que permite cifrar la información confidencial en un archivo de configuración.ASP.NET 2.0 introduced a new feature, called protected configuration, that enables you to encrypt sensitive information in a configuration file. Si bien se ha diseñado principalmente para ASP.NET, la configuración protegida también se puede usar para cifrar secciones del archivo de configuración en aplicaciones Windows.Although primarily designed for ASP.NET, protected configuration can also be used to encrypt configuration file sections in Windows applications. Para obtener una descripción detallada de las funciones de configuración protegida, vea Cifrar información de configuración mediante una configuración protegida.For a detailed description of the protected configuration capabilities, see Encrypting Configuration Information Using Protected Configuration.

En el fragmento de archivo de configuración siguiente se muestra la sección connectionStrings después de haberse cifrado.The following configuration file fragment shows the connectionStrings section after it has been encrypted. En la sección configProtectionProvider se especifica el proveedor de configuración protegida que se usa para cifrar y descifrar las cadenas de conexión.The configProtectionProvider specifies the protected configuration provider used to encrypt and decrypt the connection strings. En la sección EncryptedData se incluye el texto cifrado.The EncryptedData section contains the cipher text.

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

Cuando se recupera la cadena de conexión cifrada en tiempo de ejecución, .NET Framework usa el proveedor especificado para descifrar CipherValue y que así esté disponible para la aplicación.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. No es necesario escribir ningún código adicional para administrar el proceso de descifrado.You do not need to write any additional code to manage the decryption process.

Proveedores de configuración protegidaProtected Configuration Providers

Los proveedores de configuración protegida se registran en la sección configProtectedData del archivo machine.config en el equipo local, como se muestra en el fragmento siguiente, donde se pueden ver los dos proveedores de configuración protegida que proporciona .NET Framework.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. Los valores que se muestran se han truncado para facilitar la lectura.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>  

Puede configurar otros proveedores de configuración protegida si los agrega al archivo machine.config. Asimismo, puede crear su propio proveedor de configuración protegida heredando de la clase base abstracta ProtectedConfigurationProvider. En la tabla siguiente se describen los dos archivos de configuración incluidos en .NET Framework.The following table describes the two configuration files included with the .NET Framework.

ProveedorProvider DESCRIPCIÓNDescription
RsaProtectedConfigurationProvider Usa el algoritmo de cifrado RSA para cifrar y descifrar datos.Uses the RSA encryption algorithm to encrypt and decrypt data. Los algoritmos RSA se pueden usar para el cifrado de clave pública y para firmas digitales.The RSA algorithm can be used for both public key encryption and digital signatures. También se conoce como cifrado de "clave pública" o asimétrico, ya que usa dos claves diferentes.It is also known as "public key" or asymmetrical encryption because it employs two different keys. Puede usar la Herramienta de registro de IIS en ASP.NET (aspnet_regiis.exe) para cifrar secciones de un archivo Web.config y administrar las claves de cifrado.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 descifra el archivo de configuración cuando lo procesa.ASP.NET decrypts the configuration file when it processes the file. La identidad de la aplicación ASP.NET debe tener acceso de lectura a la clave de cifrado utilizada para cifrar y descifrar las secciones cifradas.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 Usa la API de protección de datos (DPAPI) de Windows para cifrar y descifrar las secciones de configuración.Uses the Windows Data Protection API (DPAPI) to encrypt configuration sections. Usa los servicios criptográficos integrados de Windows y se puede configurar para la protección específica de equipo o para la protección específica de cuenta de usuario.It uses the Windows built-in cryptographic services and can be configured for either machine-specific or user-account-specific protection. La protección específica de equipo resulta útil cuando varias aplicaciones del mismo servidor deben compartir información.Machine-specific protection is useful for multiple applications on the same server that need to share information. La protección específica de cuenta de usuario se puede utilizar para los servicios que se ejecutan con una identidad de usuario concreta, como un entorno de hospedaje compartido.User-account-specific protection can be used with services that run with a specific user identity, such as a shared hosting environment. Cada aplicación se ejecuta con una identidad independiente que limita el acceso a recursos como los archivos y las bases de datos.Each application runs under a separate identity which restricts access to resources such as files and databases.

Ambos proveedores proporcionan cifrado de datos de alta seguridad.Both providers offer strong encryption of data. No obstante, si prevé usar el mismo archivo de configuración de cifrado en varios servidores como, por ejemplo, una granja de servidores web, solo RsaProtectedConfigurationProvider permite exportar las claves de cifrado usadas para cifrar los datos e importarlas a otro servidor.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. Para obtener más información, vea Importar y exportar contenedores de claves RSA con configuración protegida.For more information, see Importing and Exporting Protected Configuration RSA Key Containers.

Uso de clases de configuraciónUsing the Configuration Classes

El espacio de nombres System.Configuration proporciona clases para trabajar con valores de configuración mediante programación.The System.Configuration namespace provides classes to work with configuration settings programmatically. La clase ConfigurationManager proporciona acceso a los archivos de configuración de equipo, aplicación y usuario.The ConfigurationManager class provides access to machine, application, and user configuration files. Si va a crear una aplicación ASP.NET, puede usar la clase WebConfigurationManager, que proporciona las mismas funciones a la vez que permite tener acceso a configuraciones únicas de las aplicaciones ASP.NET, como las que se encuentran en <system.web> .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>.

Nota

El espacio de nombres System.Security.Cryptography contiene clases que proporcionan opciones adicionales para cifrar y descifrar datos.The System.Security.Cryptography namespace contains classes that provide additional options for encrypting and decrypting data. Use estas clases si requiere servicios criptográficos que no están disponibles cuando se usa la configuración protegida.Use these classes if you require cryptographic services that are not available using protected configuration. Algunas de estas clases son contenedores de Microsoft CryptoAPI no administrado, mientras que otras son simplemente implementaciones administradas.Some of these classes are wrappers for the unmanaged Microsoft CryptoAPI, while others are purely managed implementations. Para más información, vea Servicios criptográficos.For more information, see Cryptographic Services.

Ejemplo de App.configApp.config Example

En este ejemplo se muestra cómo alternar el cifrado de la sección connectionStrings de un archivo app.config para una aplicación Windows.This example demonstrates how to toggle encrypting the connectionStrings section in an app.config file for a Windows application. En este ejemplo, el procedimiento recibe el nombre de la aplicación como argumento, por ejemplo, "MyApplication.exe".In this example, the procedure takes the name of the application as an argument, for example, "MyApplication.exe". Después, el archivo app.config se cifra y se copia en la carpeta que contiene el ejecutable con el nombre "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".

Nota

La cadena de conexión solo se puede descifrar en el equipo donde se ha cifrado.The connection string can only be decrypted on the computer on which it was encrypted.

El código usa el método OpenExeConfiguration para abrir el archivo app.config y editarlo; el método GetSection devuelve la sección connectionStrings.The code uses the OpenExeConfiguration method to open the app.config file for editing, and the GetSection method returns the connectionStrings section. A continuación, el código comprueba la propiedad IsProtected y llama a ProtectSection para cifrar la sección si no está cifrada.The code then checks the IsProtected property, calling the ProtectSection to encrypt the section if it is not encrypted. Para descifrar la sección se llama al método UnprotectSection.The UnprotectSection method is invoked to decrypt the section. El método Save completa la operación y guarda los cambios.The Save method completes the operation and saves the changes.

Nota

Para ejecutar el código, debe establecer una referencia al archivo System.Configuration.dll del proyecto.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

Ejemplo de Web.configWeb.config Example

Este ejemplo usa el método OpenWebConfiguration de WebConfigurationManager.This example uses the OpenWebConfiguration method of the WebConfigurationManager. Observe que en este caso puede indicar la ruta de acceso relativa al archivo Web.config mediante una tilde.Note that in this case you can supply the relative path to the Web.config file by using a tilde. El código requiere una referencia a la clase 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

Para obtener más información sobre cómo proteger las aplicaciones de ASP.NET, consulte protección de sitios web de ASP.net.For more information about securing ASP.NET applications, see Securing ASP.NET web sites.

Vea tambiénSee also