2012-02-22 14 views
5

Sto cercando di utilizzare la crittografia del database sul database a cui mi collego nella mia applicazione tramite. Entity Framework.Crittografia SQL Server 2008 R2 - con Entity Framework

C'è un modo semplice/best practice per essere in grado di ottenere i dati non crittografati & scrivere i dati crittografati nel database. Non voglio particolarmente modificare manualmente edmx xml, ma sto cercando di trovare alcune risorse che mi diranno come ottenerlo.

Sto pianificando di utilizzare Symmetric Key e l'algoritmo di crittografia DES tripla.

+0

Quindi si tratta di memorizzare dati crittografati, non un canale protetto? –

+0

Sì, memorizzazione dei dati crittografati. –

risposta

5

Cosa intendi con Crittografia SQL Server 2008 R2: è una domanda molto vaga perché ha molti significati.

Le opzioni generali:

  • Transparent Data Encryption - Caratteristica di SQL Server - intero database vengono crittografati sul lato SQL Server. La tua applicazione non ha bisogno di modifiche e dovrebbe funzionare con EF.
  • Crittografia a livello di cella - funzionalità di SQL Server - le colonne selezionate vengono crittografate e archiviate come varbinary. Ciò richiede query speciali e comandi di archiviazione, quindi dovrai utilizzare viste di database specializzate e stored procedure per interagire con il DB se desideri utilizzare EF. Se non si desidera utilizzare le viste del database e le stored procedure, è necessario mantenere EDMX manualmente e scrivere tutti i comandi SQL nella relativa parte SSDL.
  • Crittografia eseguita nell'applicazione: verranno utilizzati gli eventi ObjectMaterialized e SavingChanges per gestire la decrittografia e la crittografia. Probabilmente sarai in grado di criptare e decifrare solo dati stringa o binari perché il tuo tipo di dati di proprietà non deve cambiare (in caso di stringa dovrai memorizzare il valore crittografato come stringa base64).
+0

Grazie per la tua risposta approfondita. Ho già scontato TDE, in quanto non fornirà il livello di crittografia di cui ho bisogno. Inoltre, non voglio crittografare nella mia app, poiché ritengo che questo non sia vantaggioso come la crittografia sql. Sembra che la seconda opzione che specifichi sia ciò che dovrò fare, poiché non credo che ci sia un altro modo con EF che funzionerà nel modo in cui lo voglio. –

+0

@Ladislav Mrnka: per la crittografia a livello di cella, se hai usato SP e Views per interagire con il DB, cosa impedisce ad alcuni hacker di utilizzare le stesse SP/Views dalla decodifica dei tuoi dati? – ribald

+1

@ribald: Si tratta di avere dati crittografati sul disco. Se l'utente malintenzionato ottiene le credenziali per accedere al proprio database tramite la normale connessione, c'è solo poco che cosa può fare qualsiasi tipo di crittografia a livello di cella o trasparente a livello di database per proteggere i dati. –

0

È possibile creare una vista che restituisca i dati decrittografati.

Ad esempio:

CREATE VIEW [your_view_name] as 
SELECT 
CONVERT(varchar(200),DECRYPTBYPASSPHRASE('[your_symmetric_key]', [encrypted_field])) As [encrypted_field], 
FROM [your_table_name] 

Poi, aggiungi la tua vista come un'entità nel modello EF.

Per inserire, aggiornare o cancellare operazioni, utilizzare stored procedure.

+0

Questo significa che è difficile codificare la chiave simmetrica nella definizione della vista, giusto? Anche chiunque abbia accesso alla vista sarà in grado di vederlo. –

+0

La mia porta d'ingresso è laggiù ed è sbloccata, ma nel caso ne abbiate bisogno, ecco la chiave. – Tony

Problemi correlati