sql >> Base de Datos >  >> RDS >> Sqlserver

Comprensión de SQL Server siempre cifrado

La seguridad es uno de los requisitos más importantes para un sistema basado en datos. El cifrado es una de las formas de proteger los datos. Wikipedia define el cifrado como:

Cifrado es el proceso de codificar un mensaje o información de tal manera que solo las partes autorizadas puedan acceder a él y aquellos que no están autorizados no puedan.

En SQL Server 2016, Microsoft introdujo una función de cifrado llamada Always Encrypted . En este artículo, veremos qué Always Encrypted es, y cómo se puede utilizar para cifrar y descifrar datos, con la ayuda de ejemplos sencillos.

¿Qué es SQL Server siempre cifrado?

Siempre encriptado es una función de seguridad que permite que la aplicación cliente administre las claves de cifrado y descifrado, lo que garantiza que solo la aplicación cliente pueda descifrar y utilizar datos confidenciales.

Existen varias técnicas de encriptación, sin embargo, no son tan seguras como Always Encrypted . Por ejemplo, el cifrado de clave simétrica se utiliza para cifrar datos en el lado de la base de datos. Una desventaja de este enfoque es que si cualquier otro administrador de la base de datos tiene la clave de descifrado, puede acceder a los datos.

Por otro lado, en el caso de Always Encrypted , los datos se cifran en el lado del cliente y el servidor de la base de datos recibe una versión cifrada de los datos. Por lo tanto, los datos no se pueden descifrar al final de la base de datos. Solo el cliente que cifró los datos puede descifrarlos.

Tipos de clave

La función SQL Server Always Encrypted utiliza dos tipos de claves:

  • Clave de cifrado de columna (CEK)

Siempre se coloca en el servidor de la base de datos. Los datos en realidad están encriptados usando la columna CEK. Sin embargo, si alguien del lado de la base de datos tiene acceso a CEK, puede descifrar los datos.

  • Clave maestra de columna (CMK)

Esta clave se coloca en el lado del cliente o en cualquier almacenamiento de terceros. CMK se utiliza para proteger el CEK, agregando una capa adicional de seguridad. Cualquiera que tenga acceso a la CMK puede descifrar la CEK, que luego se puede usar para descifrar los datos reales.

Tipos de cifrado

  • Determinista

Este tipo de encriptación siempre generará texto encriptado similar para el mismo tipo de datos. Si desea implementar la búsqueda y la agrupación en una columna de la tabla, utilice el cifrado determinista para esa columna.

  • Aleatorizado

Cifrado aleatorio generará texto encriptado diferente para el mismo tipo de datos, cada vez que intente encriptar los datos. Use cifrado aleatorio si la columna no se usa para agrupar y buscar.

Configuración Siempre cifrado Uso de SSMS

Podemos configurar SQL Server Always Encrypted a través de SSMS. Pero antes de eso, necesitamos crear una base de datos y agregar una tabla a la base de datos. Ejecute el siguiente script para hacerlo:

CREATE DATABASE School

Use School
CREATE TABLE Student  
(  
   StudentId int identity(1,1) primary key,  
   Name varchar(100),  
   Password varchar(100) COLLATE Latin1_General_BIN2 not null,  
   SSN varchar(20)  COLLATE Latin1_General_BIN2 not null
)

En el script anterior, creamos una nueva base de datos llamada Escuela . La base de datos tiene cuatro columnas:StudentId , Nombre , Contraseña y SSN . Puede ver que las columnas Contraseña y SSN tienen COLLATE. Es necesario especificar COLLATE para la columna que desea Always Encrypted . El tipo de cifrado se especifica como "Latin1_General_BIN2".

Intentemos primero agregar dos registros en la tabla de estudiantes.

insert into Student ( Name, Password, SSN)
VALUES ('John','abc123', '451236521478'),
('Mike','xyz123', '789541239654')

En este momento, no hemos configurado Always Encrypted en cualquiera de las columnas de la tabla de Estudiantes, por lo tanto, si intenta seleccionar los registros de la tabla de Estudiantes, verá los valores de datos reales en lugar de los valores cifrados. Ejecute la siguiente consulta para seleccionar registros:

SELECT * FROM Student

La salida se ve así:

Configuremos ahora SSMS para habilitar Always Encrypted . Como dijimos antes, Always Encrypted crea claves de cifrado de columna y claves maestras de columna.

Para ver las claves de cifrado de columna existentes y las claves maestras de columna, para la base de datos de la escuela, vaya a Bases de datos -> Escuela -> Seguridad -> Claves siempre cifradas como se muestra en la siguiente figura:

Dado que no tiene ningún registro cifrado en el conjunto de datos, no verá ningún CEK o CMK en la lista.

Habilitemos ahora el cifrado en las columnas Contraseña y SSN de la tabla Estudiante. Para hacerlo, haga clic derecho en Bases de datos -> Escuela. En el menú desplegable, seleccione Cifrar columnas opción como se muestra en la siguiente figura:

Haga clic en Siguiente botón en la Introducción ventana. Desde la Selección de columna ventana, verifique las columnas Contraseña y SSN. Para la columna Contraseña, seleccione el tipo de cifrado como Aleatorizado . Para la columna SSN, elija Determinista . Esto se muestra en la siguiente captura de pantalla:

Haga clic en Siguiente botón en la Configuración de la llave maestra ventana. De manera predeterminada, la clave maestra se almacena en la máquina cliente como se muestra a continuación:

Haga clic en Siguiente botón en Configuración de ejecución y el Resumen ventanas Si todo va bien, debería ver los siguientes Resultados ventana.

Ahora, si vuelve a ir a Bases de datos -> Escuela -> Seguridad -> Claves siempre cifradas, debería ver el CEK y el CMK recién creados como se muestra en la siguiente figura:

Ahora intente seleccionar registros de la tabla de estudiantes.

SELECT * FROM Student

La salida se ve así.

En el resultado, puede ver que las columnas Contraseña y SSN se cifraron.

Recuperación de datos descifrados

La consulta SELECT devolvió datos cifrados. ¿Qué sucede si desea recuperar datos en forma descifrada? Para hacerlo, cree una Nueva ventana de consulta en SSMS y luego haga clic en Cambiar conexión icono en la parte superior del Explorador de objetos como se muestra en la siguiente figura:

Aparecerá la ventana de conexión de SQL Server. Seleccione Opciones desde abajo a la derecha como se muestra a continuación:

Desde la ventana que aparece, haga clic en Parámetros de conexión adicionales desde la parte superior izquierda e ingrese "Configuración de cifrado de columna =Habilitado" en el cuadro de texto como se muestra en la siguiente captura de pantalla. Finalmente, haga clic en Conectar botón.

Ahora ejecute de nuevo la siguiente consulta SELECT:

SELECT * FROM Student

En los resultados, verá los registros devueltos en formato descifrado como se muestra a continuación:

Conclusión

Siempre E cifrado es una de las características de seguridad más recientes de SQL Server. En este artículo, revisamos brevemente lo que Siempre E cifrado es y cómo habilitarlo usando SQL Server Management Studio. También vimos un ejemplo básico de encriptación y desencriptación de datos usando Siempre E cifrado función.