Principales respuestas
Enmascarar Columnas SQL SERVER 2017 ENTERPRISE.

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
- Editado Diego Javier Quispe Sullca martes, 3 de diciembre de 2019 17:22
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.
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
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.
- Propuesto como respuesta Diana AcuñaModerator martes, 3 de diciembre de 2019 19:05
- Marcado como respuesta Diego Javier Quispe Sullca martes, 3 de diciembre de 2019 23:16
Todas las 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.
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
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.
- Propuesto como respuesta Diana AcuñaModerator martes, 3 de diciembre de 2019 19:05
- Marcado como respuesta Diego Javier Quispe Sullca martes, 3 de diciembre de 2019 23:16
-
EstimadoJavi Fernández F
Javi Fernández F Se unió May 2016 2
6
12
Gracias por la colaboración me funciono tu ayuda.
Muchas gracias
diego
- Propuesto como respuesta Diana AcuñaModerator miércoles, 4 de diciembre de 2019 15:33
- Votado como útil Diana AcuñaModerator miércoles, 4 de diciembre de 2019 15:33
-