2012-02-22 24 views
5

Estoy buscando utilizar el cifrado de la base de datos en la base de datos a la que me conecto en mi aplicación. Marco de la entidad.Cifrado de SQL Server 2008 R2 - con Entity Framework

Hay una manera fácil/mejor práctica para poder obtener los datos no cifrados & escribir datos encriptados a la base de datos. En particular, no quiero tener que editar el xml de edmx manualmente, pero estoy luchando por encontrar algunos recursos que me digan cómo lograr esto.

Estoy planeando utilizar Symmetric Key y el algoritmo triple de cifrado DES.

+0

¿Esto se trata de almacenar datos cifrados, no un canal seguro? –

+0

Sí, almacenando datos encriptados. –

Respuesta

5

¿Qué quiere decir con SQL Server 2008 R2 Encryption? Es una pregunta muy vaga porque tiene muchos significados.

Sus opciones generales:

  • transparente cifrado de datos - Función de SQL Server - base de datos completa se cifra en el lado de SQL Server. Su aplicación no necesita cambiar y debería funcionar con EF.
  • Cifrado de nivel celular: característica de SQL Server: las columnas seleccionadas se cifran y almacenan como varbinary. Esto requiere comandos especiales de consulta y almacenamiento, por lo que deberá usar vistas de bases de datos especializadas y procedimientos almacenados para interactuar con su base de datos si desea utilizar EF. Si no desea usar las vistas de la base de datos y los procedimientos almacenados, deberá mantener EDMX manualmente y escribir todos los comandos SQL en su parte SSDL.
  • Cifrado realizado en su aplicación: utilizará los eventos ObjectMaterialized y SavingChanges para manejar el descifrado y el cifrado. Probablemente podrá cifrar y descifrar solo datos binarios o de cadena porque su tipo de datos de propiedad no debe cambiar (en el caso de una cadena, tendrá que almacenar el valor cifrado como cadena base64).
+0

Gracias por su minuciosa respuesta. Ya he descontado TDE, ya que no proporcionará el nivel de encriptación que necesito. Tampoco quiero cifrar en mi aplicación, ya que creo que esto no es tan ventajoso como el cifrado SQL. Parece que la segunda opción que detallará es lo que tendré que hacer, ya que no creo que haya otra manera con EF que funcione de la manera que yo quiero. –

+0

@Ladislav Mrnka: para el cifrado de nivel celular, si usó SP y Vistas para interactuar con el DB, ¿qué impide que algún hacker use el mismo SP/Views para descifrar sus datos? – ribald

+1

@ribald: Se trata de tener datos cifrados en el disco. Si el atacante obtiene credenciales para acceder a su base de datos a través de la conexión normal, hay muy poco que pueda hacer cualquier tipo de encriptación transparente o de nivel celular en el nivel de la base de datos para proteger los datos. –

0

Puede crear una vista que devuelva datos descifrados.

Por ejemplo:

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

A continuación, añadir su vista como una entidad en su modelo de EF.

Para insertar, actualizar o eliminar operaciones, use procedimientos almacenados.

+0

Esto significa codificar la clave simétrica en la definición de la vista ¿verdad? También cualquier persona con acceso a la vista podrá verlo. –

+0

Mi puerta de entrada está por allí y está desbloqueada, pero por si la necesita aquí está la llave. – Tony

Cuestiones relacionadas