top of page

SQL SERVER 2016 - NOVEDADES


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.


Entradas destacadas
Vuelve pronto
Una vez que se publiquen entradas, las verás aquí.
Entradas recientes
Archivo
Buscar por tags
Síguenos
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page