2010-01-29 21 views
16

Creé una aplicación C# (no página web asp) que se conecta a un servidor SQL 2005. En mi código fuente, la contraseña y el ID de usuario para este servidor sql están codificados en texto plano en ConnectionString.encrypt SQL connectionstring C#

SqlConnection con = new SqlConnection(); 
con.ConnectionString = 
     "Data Source=server1;"+ 
     "Initial Catalog=mydatabase;"+ 
     "Integrated Security=no;"+ 
     "User ID=admin;Password=mypassword;"; 
con.Open(); 

¿Hay una manera fácil de cifrar la contraseña o connectionstring conjunto, que otros pueblos, que los desmontan mi herramienta no son capaces de ver la contraseña?

gracias

Respuesta

0

Puede encrypt sections en la aplicación.config de la misma manera que web.config. MS lo llama Protected Configuration. Dado que tanto los datos encriptados como la clave residen en la misma máquina, solo lo hace más difícil pero, en teoría, no es imposible acceder a los datos.

1

No, sólo se puede hacer que sea difícil

Es mejor dejar que la aplicación utilice un inicio de sesión especial de la base de datos que sólo tiene acceso a las tablas/procedimientos necesarios.

4

Hay dos maneras de hacerlo:

1) puede utilizar la configuración sección segura para cifrar y descifrar strimng conexión desde su código fuente:

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); 
    } 

2) puede acceder a datos de Enterprise Library Bloque de aplicación para realizar el cifrado utilizando RSAProtectedConfigurationProvider o DPAPIProtectedConfigurationProvider.

Para una completa articvle ir a ->http://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx

+1

gracias, pero no sé cómo implementar esto. Acabo de crear un dll de mi proyecto C# - sin exe y sin app.config? ¡también este dll tiene que ser utilizado en diferentes computadoras y usuarios! – Tobi

+0

Una forma es, puede crear un archivo XML y almacenar su configuración en eso. Luego puede mantener ese XML en una ubicación específica en cada una de las máquinas desplegables, y luego puede leerlo. Una de las mejores técnicas es usar un administrador de configuración personalizado, es decir, una biblioteca de clases diferente que gestione los elementos de configuración, y su DLL principal haría referencia a eso o podría usar el Bloque de configuración presente en Enterprise Library. – Bhaskar

-3

también se puede almacenar el nombre y contraseña en el Registro en lugar de almacenar en el archivo de configuración. Lea el nombre de usuario y la contraseña del registro cuando intente conectarse a la base de datos. Recuerde que debe cifrar el nombre de usuario y la contraseña mientras se almacena en el registro y descifrar el nombre de usuario y la contraseña mientras se recupera del registro.

+1

Almacenar información de texto sin formato en el registro no es muy diferente de un archivo de configuración. Esto más una sensación de seguridad solo cuando tienes en cuenta la amenaza que estás evitando. Si ya tienen acceso a ese archivo, es muy probable que tengan acceso a esa clave de registro. Ellos saben lo que están buscando. –

+0

pero el OP explícitamente declaró 'Recuerde que tiene que cifrar el nombre de usuario y la contraseña' –

+0

Los archivos de configuración de la aplicación (app.config y web.config) se han creado especialmente para contener este tipo de información. Por lo tanto, es mucho más eficiente y simple administrar el usuario/contraseña, las cadenas de conexión y todas las demás configuraciones de la aplicación con esos archivos en lugar de utilizar el Registro de Windows. Especialmente en un entorno de servidor con aplicaciones ASP.NET. –

Cuestiones relacionadas