none
Enmascarar Columnas SQL SERVER 2017 ENTERPRISE. RRS feed

  • Pregunta

  • Hola amigos tengo el siguiente escenario una tabla t_tabla_prueba en que contiene 2 columnas

    y la segunda columna (NOMBRE SE ENCUENTRA ENMSCARADA)

    CREATE TABLE t_tabla_prueba

    (

    [ID]     [INT] IDENTITY(1, 1) NOT NULL,
     [NOMBRE] [NVARCHAR](50)
    )

    ALTER TABLE t_tabla_prueba
    ALTER COLUMN NOMBRE varchar(50) MASKED WITH (FUNCTION = 'default()'); 

    todo bien, pero cuando un usuario Owner no puede visualizar los datos originales, y coloque las siguientes

    comando para poder habilitar su lectura (Datos sin enmascarar)

    GRANT UNMASK TO TestUser; 
    EXECUTE AS USER = 'TestUser'
    SELECT * FROM t_tabla_prueba;
    REVERT;  

    (Aclarar que son usuarios de dominio)


    -- Removing the UNMASK permission 
    REVOKE UNMASK TO TestUser;   

    el único que ver los datos originales es un usuario sysadmin

    la versión de SQL SERVER 2017 ENTERPRISE

    Por favor su ayuda.

    Gracias.


    diego


    martes, 3 de diciembre de 2019 16:41

Respuestas

  • Hola Diego Javier Quispe Sullca:

    Creo que no entiendo muy bien, porque según la definición de masked dice:

    El enmascaramiento dinámico de datos (DDM) limita la exposición de información confidencial al ocultarla a losusuarios sin privilegios. Se puede usar para simplificar considerablemente el diseño y la codificación de la seguridad en la aplicación.

    https://docs.microsoft.com/es-es/sql/relational-databases/security/dynamic-data-masking?view=sql-server-ver15

    El proceso lógico, (al menos, hasta la fecha, yo  creía que ni tan siquiera se podía), no es enmascarar a un usuario OWNER, sino a otros usuarios.

    Yo realizo lo que tú comentas

    CREATE TABLE t_tabla_prueba
    (
    [ID]     [INT] IDENTITY(1, 1) NOT NULL,
     [NOMBRE] [NVARCHAR](50)
    )
    go
    ALTER TABLE t_tabla_prueba
    ALTER COLUMN NOMBRE varchar(50) MASKED WITH (FUNCTION = 'default()'); 
    go
    insert into t_tabla_prueba (nombre)
    values 
    ('aaaaaaaaaaaaaaaaaaaa');
    go
    

    Luego me creo un user owner

    USE [master]
    GO
    CREATE LOGIN [usuarioEnmascaradoOwner] WITH PASSWORD=N'mipass', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
    GO
    USE [Normaldb]
    GO
    CREATE USER [usuarioEnmascaradoOwner] FOR LOGIN [usuarioEnmascaradoOwner]
    GO
    USE [Normaldb]
    GO
    ALTER ROLE [db_owner] ADD MEMBER [usuarioEnmascaradoOwner]
    GO
    

    Me logueo

    y con el login

    Pero si sigo este procedimiento

    Enmascaramiento

    https://javifer2.wordpress.com/2019/11/17/unmask-data-masking-o-en-castellano-no-te-voy-a-ensenar-todos-los-datos/

    CREATE USER Cliente WITHOUT LOGIN;
    GO
    ALTER ROLE [db_datareader] ADD MEMBER Cliente;
    GO
    EXECUTE AS USER = 'Cliente';
     
    select * from t_tabla_prueba 
     
    REVERT;

    Como ves el login de la conexión es el [usuarioEnmascaradoOwner] que aparece en la pestaña, pero la sentencia la ejecuto como USER 'cliente' y me devuelve los datos enmascarados.


    martes, 3 de diciembre de 2019 18:42

Todas las respuestas