2010-01-29 14 views
16

Ho creato un'applicazione C# (non asp webpage) che si connette a un server sql 2005. Nel mio codice sorgente la password e l'ID utente per questo server SQL sono codificati in testo semplice in ConnectionString.criptazione connessione SQL C#

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

C'è un modo semplice per crittografare la password o intero ConnectionString, che altri popoli che smontano il mio strumento, non sono in grado di vedere la password?

grazie

risposta

0

È possibile effettuare il encrypt sections nell'app.config allo stesso modo di web.config. MS lo chiama Protected Configuration. Poiché sia ​​i dati crittografati che la chiave risiedono sulla stessa macchina, rendono solo più difficile, ma in teoria non è impossibile accedere ai dati.

1

No, si può solo rendere difficile

E 'meglio lasciare che l'applicazione utilizza uno speciale accesso al database che ha ottenuto solo l'accesso alle tabelle/procedure necessarie.

4

Ci sono due modi per farlo:

1) È possibile utilizzare Configurazione Sezione sicuro per cifrare e decifrare il collegamento strimng dal codice sorgente:

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) È possibile accedere a Enterprise Library dati Application Block per eseguire la crittografia utilizzando RSAProtectedConfigurationProvider o DPAPIProtectedConfigurationProvider.

Per un articvle completo andare su ->http://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx

+1

grazie, ma non so come implementarlo. Ho appena creato una dll dal mio progetto C# - nessun exe e nessun app.config? anche questa DLL deve essere utilizzata su diversi computer e utenti! – Tobi

+0

Un modo è, è possibile creare un file XML e memorizzare le impostazioni in questo. Quindi è possibile mantenere tale XML in una posizione specifica in ciascuno dei sistemi di distribuzione, quindi leggerlo. Una delle migliori tecniche consiste nell'utilizzare un gestore di configuarzione personalizzato, ovvero una diversa libreria di classi che gestisce i tuoi elementi di configurazione, e la tua DLL principale farebbe riferimento a quella o potresti usare il blocco Congfiguration presente in Enterprise Library. – Bhaskar

-3

è anche possibile memorizzare username e password nel Registro invece di memorizzare nel file di configurazione. Leggere il nome utente e la password dal registro quando si tenta di connettersi al database. Ricordare che è necessario crittografare il nome utente e la password durante l'archiviazione nel registro e decrittografare il nome utente e la password durante il recupero dal registro.

+1

La memorizzazione di informazioni di testo normale nel registro non è molto diversa da un file di configurazione. Questo più di un senso di sicurezza solo quando prendi in considerazione la minaccia che stai impedendo. Se hanno già accesso a quel file, è molto probabile che abbiano accesso a quella chiave di registro. Sanno cosa stanno cercando. –

+0

ma l'OP ha esplicitamente dichiarato "Ricorda che devi crittografare il nome utente e la password" –

+0

I file di configurazione dell'applicazione (app.config e web.config) sono stati appositamente creati per contenere questo tipo di informazioni. Quindi è molto più efficace e semplice gestire user/password, stringhe di connessione e tutte le altre impostazioni dell'applicazione con quei file piuttosto che usare il registro di Windows. Soprattutto su un ambiente server con applicazioni ASP.NET. –

Problemi correlati