SQL SERVER 2016 - NOVEDADES
- fgfranciscoguzman5
- 16 abr 2016
- 2 Min. de lectura

SQL 2016 SESSION_CONTEXT
Muchas de nuestras aplicaciones se conectan con un solo login hacia el motor de base de datos.
El problema esta en como hacer para por ejemplo enviar información del usuario real de la aplicación y poderla usar con SQL Server.
Antes de SQL 2016 teníamos la opción de configurar CONTEXT_INFO el cual nos permita asignar variables a la conexión y luego poderla usar en nuestros procesos como por ejemplo Triggers de auditoria.
En SQL 2016 se introduce un cambio llamado SESSION_CONTEXT el cual tiene muchas mejoras con respecto a su antecesor las cuales son:
Se pueden asignar claves y valores
Se puede preguntar luego por esas claves de forma simple.
Soporta hasta 256kb por conexión.
Dynamic Data Masking
La posibilidad de poder alterar los datos sensibles de nuestras tablas para que no sean interpretados por quienes no deseamos suele ser una necesidad y practica habitual en muchas empresas.
Supongamos que tenemos una base en producción con datos de clientes y no deseamos que ciertas personas puedan ver datos sensibles (por ejemplo: Tarjeta de crédito, salario, etc.).
Antes de SQL 2016 (que aun esta en beta CTP3) esta operación se solía hacer con herramientas de terceros o procesos.
Otra necesidad podría ser pasar una base de producción a testing y que los programadores no puedan ver ciertos datos sensibles, para todos estos casos Dynamic Data Masking es para usted.
Paso 1: Creamos una tabla
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
USE TEMPDB
GO
DROP TABLE IF EXISTS DBO.CLIENTES
CREATE TABLE DBO.CLIENTES (
ID INT IDENTITY(1, 1) PRIMARY KEY
,FNAME NVARCHAR(30) NOT NULL
,LNAME NVARCHAR(30) NOT NULL
,CCARD VARCHAR(20) NULL
,SALARYI INT NULL
,EMAIL1 NVARCHAR(60) NULL
,EMAIL2 NVARCHAR(60) NULL
,SOMEDATE DATETIME NULL
)
Paso 2: Insertamos valores
1
2
3
4
5
6
INSERT INTO [DBO].[CLIENTES]
([FNAME],[LNAME] ,[CCARD] ,[SALARYI],[EMAIL1],[EMAIL2] , SOMEDATE)
VALUES('MAXI','ACCOTTO','1234-5678-1234-5678',999999,'MAXI@TRIGGERDB.COM','MAXI@TRIGGERDB.COM', '31-MARCH-2013')
GO 50
Paso 3: Aplicamos Data Masking sobre algunos campos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ALTER TABLE CLIENTES
ALTER COLUMN CCARD ADD MASKED
WITH (FUNCTION = 'PARTIAL(2,"XX-XXXX-XXXX-XX",2)')
ALTER TABLE CLIENTES
ALTER COLUMN SALARYI ADD MASKED
WITH (FUNCTION = 'DEFAULT()') -- DEFAULT ON INT
ALTER TABLE CLIENTES
ALTER COLUMN SOMEDATE ADD MASKED
WITH (FUNCTION = 'DEFAULT()') -- DEFAULT ON DATE
ALTER TABLE CLIENTES
ALTER COLUMN FNAME ADD MASKED
WITH (FUNCTION = 'DEFAULT()') -- DEFAULT ON VARCHAR
ALTER TABLE CLIENTES
ALTER COLUMN EMAIL1 ADD MASKED
WITH (FUNCTION = 'EMAIL()')
GO
Paso 4: Creamos un usuario en la base para hacer pruebas
1
2
3
4
CREATE USER MAXI WITHOUT LOGIN;
GRANT SELECT ON CLIENTES TO MAXI;
Paso 5: Probamos DataMasking con ese usuario
1
2
3
4
5
6
EXECUTE AS USER = 'MAXI';
SELECT TOP 5 * FROM CLIENTES; -- THIS SHOULD SHOW MASKED DATA
SELECT TOP 5 * FROM CLIENTES WHERE ID BETWEEN 1 AND 5
SELECT TOP 5 * FROM CLIENTES WHERE SALARYI = 999999
Paso 6: Si deseamos que pueda ver los datos le damos permiso
1
2
3
GRANT UNMASK TO MAXI;
Conclusiones: Dynamic Data Masking viene a resolver una necesidad de seguridad muy frecuente en instalaciones SQL Server.
Comments