Planeamiento e implementación de enmascaramiento dinámico

Completado

Azure SQL Database, Azure SQL Managed Instance y Azure Synapse Analytics admiten el enmascaramiento dinámico de datos. El enmascaramiento dinámico de datos limita la exposición de información confidencial mediante su enmascaramiento a los usuarios sin privilegios.

El enmascaramiento de datos dinámicos ayuda a impedir el acceso no autorizado a datos confidenciales permitiendo a los usuarios designar la cantidad de los datos confidenciales que se revelarán con un efecto mínimo en el nivel de aplicación. Se trata de una característica de protección de datos que oculta la información confidencial del conjunto de resultados de una consulta de campos designados de una base de datos, sin modificar los datos de esta última.

Por ejemplo, un representante de servicio en un centro de llamadas podría identificar a un autor de la llamada mediante la confirmación de varios caracteres de su dirección de correo electrónico, pero la dirección de correo electrónico completa no debe revelarse al representante de servicio. Se puede definir una regla de enmascaramiento que enmascara toda la dirección de correo electrónico del conjunto de resultados de cualquier consulta. Otro ejemplo, una máscara de datos apropiada se puede definir para proteger los datos personales, para que un desarrollador pueda consultar los entornos de producción para solucionar problemas sin infringir las reglamentaciones de cumplimiento.

Datos básicos del enmascaramiento dinámico de datos

Para configurar una directiva de enmascaramiento de datos dinámicos en Azure Portal, se selecciona la hoja Enmascaramiento dinámico de datos en el panel de configuración de SQL Database.

Directiva de enmascaramiento dinámico de datos

  • Usuarios de SQL excluidos del enmascaramiento: conjunto de usuarios de SQL o identidades de Microsoft Entra ID que obtendrán datos sin máscara en los resultados de la consulta SQL. Los usuarios con privilegios de administrador se excluirán siempre del enmascaramiento y verán los datos originales sin ninguna máscara.
  • Reglas de enmascaramiento: conjunto de reglas que definen los campos designados para el enmascaramiento y la función de enmascaramiento que se va a usar. Los campos designados se pueden definir mediante un nombre de esquema de base de datos, un nombre de tabla y un nombre de columna.
  • Funciones de enmascaramiento: conjunto de métodos que controlan la exposición de los datos en distintos escenarios.
Function Descripción Ejemplos
Valor predeterminado Enmascaramiento completo de acuerdo con los tipos de datos de los campos designados.

Para los tipos de datos String, use XXXX (o un valor menor) si el tamaño del campo es inferior a 4 caracteres (char, nchar, varchar, nvarchar, text, ntext).

Para los tipos de datos numéricos, use un valor cero (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real).

En el caso de los tipos de datos de fecha y hora, use 1900-01-01 00:00:00.0000000 (date, datetime2, datetime, datetimeoffset, smalldatetime, time).

En lo que respecta a los tipos de datos binarios, use un solo byte de valor 0 de ASCII (binary, varbinary, image).
Sintaxis de definición de columna de ejemplo: Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL

Ejemplo de sintaxis de modificación: ALTER COLUMN Gender ADD MASKED WITH (FUNCTION = 'default()')
Correo electrónico Método de enmascaramiento que expone la primera letra de una dirección de correo electrónico y el sufijo constante ".com", en el formato de una dirección de correo electrónico. aXXX@XXXX.com. Sintaxis de definición de ejemplo: Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL

Ejemplo de sintaxis alter: ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
Aleatorio Una función de enmascaramiento aleatorio que se puede usar con cualquier tipo numérico a fin de enmascarar el valor original con uno aleatorio dentro de un intervalo especificado. Sintaxis de definición de ejemplo: Account_Number bigint MASKED WITH (FUNCTION = 'random([start range], [end range])')

Ejemplo de sintaxis alter: ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
Cadena personalizada Método de enmascaramiento que expone la primera y última letra y agrega una cadena de relleno personalizada en el medio. prefix,[padding], sufijo

Si el valor original es demasiado corto para completar toda la máscara, no se expone parte del prefijo o sufijo.
Ejemplo de sintaxis de definición: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL

Ejemplo de sintaxis de modificación: ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)')

Esto convierte un número de teléfono como 555.123.1234 en 5XXXXXXX.

Ejemplo adicional:

ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)')

Esto convierte un número de teléfono como 555.123.1234 en 555.1XXXXXXX.
Datetime Se aplica a: SQL Server 2022 (16.x)

Método de enmascaramiento para la columna definida con el datetime de tipo de datos, datetime2, date, time, datetimeoffset, smalldatetime. Ayuda a enmascarar la parte del día correspondiente al año => datetime("Y"), mes => datetime("M"), día => datetime("D"), hora => datetime("h"), minuto => datetime("m") o segundos => datetime("s").
Ejemplo de cómo enmascarar el año del valor datetime:

ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")')

Ejemplo de cómo enmascarar el mes del valor datetime:

ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")')

Ejemplo de cómo enmascarar el minuto del valor datetime:

ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")')
Función de enmascaramiento Lógica de enmascaramiento
Valor predeterminado Enmascaramiento completo según los tipos de datos de los campos designados

* Use XXXX (o un valor menor) si el tamaño del campo es inferior a 4 caracteres para los tipos de datos de cadena (nchar, ntext, nvarchar).
* Use un valor de cero para los tipos de datos numéricos (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real).
* Use 1900-01-01 para los tipos de datos de fecha y hora (date, datetime2, datetime, datetimeoffset, smalldatetime, time).
* Para sql_variant, se utiliza el valor predeterminado del tipo actual.
* Para XML, se utiliza el documento <masked />.
* Use un valor vacío para tipos de datos especiales (marca de tiempo, tabla, HierarchyID, uniqueidentifier, binary, image, varbinary y tipos espaciales).
Tarjeta de crédito Método de enmascaramiento que expone los últimos cuatro dígitos de los campos designados y agrega una cadena constante como prefijo en el formato de una tarjeta de crédito.

XXXX-XXXX-XXXX-1234
Correo electrónico Método de enmascaramiento que expone la primera letra y reemplaza el dominio con XXX.com con una cadena constante como prefijo en el formato de una dirección de correo electrónico.

aXX@XXXX.com
Número aleatorio Método de enmascaramiento que genera un número aleatorio según los límites seleccionados y los tipos de datos reales. Si los límites designados son iguales, la función de enmascaramiento será un número constante.

Recorte de pantalla que muestra el método de enmascaramiento para generar un número aleatorio.
Texto personalizado Método de enmascaramiento que expone el primero y el último carácter y agrega una cadena de relleno personalizada en el medio. Si la cadena original es más corta que el prefijo y el sufijo expuestos, se usará únicamente la cadena de relleno.

prefix[padding]suffix

Recorte de pantalla del panel de navegación.

El motor de recomendaciones de DDM marca determinados campos de la base de datos como campos potencialmente confidenciales, que pueden ser buenos candidatos para enmascaramiento. En el panel Enmascaramiento dinámico de datos del portal, verá las columnas recomendadas para la base de datos. Seleccione Agregar máscara para una o varias columnas y, a continuación, seleccione la función de enmascaramiento adecuada y seleccione Guardar para aplicar la máscara para estos campos.

Administración del enmascaramiento dinámico de datos mediante T-SQL

Configuración del enmascaramiento dinámico de datos para la base de datos mediante cmdlets de PowerShell

Directivas de enmascaramiento de datos

Reglas de enmascaramiento de datos

Configuración del enmascaramiento de datos dinámicos para la base de datos mediante la API de REST

Puede usar las API de REST para administrar las reglas y directiva de enmascaramiento de datos mediante programación. Las API de REST publicadas admiten las siguientes operaciones:

Directivas de enmascaramiento de datos

  • Crear y actualizar: crea o actualiza una directiva de enmascaramiento de datos para la base de datos.
  • Obtener: obtiene una directiva de enmascaramiento de datos para la base de datos.

Reglas de enmascaramiento de datos

Permisos

Estos son los roles integrados para configurar el enmascaramiento dinámico de datos:

Estas son las acciones necesarias para usar el enmascaramiento dinámico de datos:

Lectura y escritura:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/*

Read:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/read

Write:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/write

Para más información sobre los permisos al usar el enmascaramiento dinámico de datos con el comando T-SQL, consulte Permisos

Ejemplo de permiso granular

Evite el acceso no autorizado a datos confidenciales y obtenga el control enmascarándolo a un usuario no autorizado en diferentes niveles de la base de datos. Puede conceder o revocar permisos UNMASK a nivel de base de datos, de esquema, de tabla o de columna a cualquier usuario o rol de la base de datos. En combinación con la autenticación de Microsoft Entra, los permisos UNMASK se pueden administrar para usuarios, grupos y aplicaciones que se mantienen en su entorno de Azure. El permiso UNMASK proporciona una manera granular de controlar y limitar el acceso no autorizado a los datos almacenados en la base de datos y mejorar la administración de la seguridad de los datos.

  1. Crear un esquema para contener tablas de usuario:

    CREATE SCHEMA Data;
    GO
    
    
    
  2. Crear una tabla con columnas enmascaradas:

    CREATE TABLE Data.Membership (
        MemberID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED,
        FirstName VARCHAR(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
        LastName VARCHAR(100) NOT NULL,
        Phone VARCHAR(12) MASKED WITH (FUNCTION = 'default()') NULL,
        Email VARCHAR(100) MASKED WITH (FUNCTION = 'email()') NOT NULL,
        DiscountCode SMALLINT MASKED WITH (FUNCTION = 'random(1, 100)') NULL,
        BirthDay DATETIME MASKED WITH (FUNCTION = 'default()') NULL
    );
    
    
  3. Insertar datos de ejemplo:

    INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode, BirthDay)
    VALUES
    ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10, '1985-01-25 03:25:05'),
    ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5, '1990-05-14 11:30:00'),
    ('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50, '2004-02-29 14:20:10'),
    ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40, '1990-03-01 06:00:00');
    
    
    
  4. Crear un esquema para contener tablas de servicio:

    CREATE SCHEMA Service;
    GO
    
    
  5. Crear una tabla de servicio con columnas enmascaradas:

    CREATE TABLE Service.Feedback (
        MemberID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED,
        Feedback VARCHAR(100) MASKED WITH (FUNCTION = 'default()') NULL,
        Rating INT MASKED WITH (FUNCTION = 'default()'),
        Received_On DATETIME
    );
    
    
  6. Insertar datos de ejemplo:

    INSERT INTO Service.Feedback (Feedback, Rating, Received_On)
    VALUES
    ('Good', 4, '2022-01-25 11:25:05'),
    ('Excellent', 5, '2021-12-22 08:10:07'),
    ('Average', 3, '2021-09-15 09:00:00');
    
    
    
  7. Crear usuarios diferentes en la base de datos:

    CREATE USER ServiceAttendant WITHOUT LOGIN;
    GO
    CREATE USER ServiceLead WITHOUT LOGIN;
    GO
    CREATE USER ServiceManager WITHOUT LOGIN;
    GO
    CREATE USER ServiceHead WITHOUT LOGIN;
    GO
    
    
    
  8. Conceder permisos de lectura a los usuarios de la base de datos:

    ALTER ROLE db_datareader ADD MEMBER ServiceAttendant;
    ALTER ROLE db_datareader ADD MEMBER ServiceLead;
    ALTER ROLE db_datareader ADD MEMBER ServiceManager;
    ALTER ROLE db_datareader ADD MEMBER ServiceHead;
    
    
    
  9. Conceder permisos UNMASK diferentes a los usuarios:

    --Grant column level UNMASK permission to ServiceAttendant
    GRANT UNMASK ON Data.Membership(FirstName) TO ServiceAttendant;
    
    
    
    -- Grant table level UNMASK permission to ServiceLead
    GRANT UNMASK ON Data.Membership TO ServiceLead;
    
    
    
    -- Grant schema level UNMASK permission to ServiceManager
    GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
    GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
    
    
    
    --Grant database level UNMASK permission to ServiceHead;
    GRANT UNMASK TO ServiceHead;
    
    
    
  10. Consulte los datos en el contexto del usuario ServiceAttendant:

    EXECUTE AS USER = 'ServiceAttendant';
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    REVERT;
    
    
    
  11. Consulte los datos en el contexto del usuario ServiceLead:

    EXECUTE AS USER = 'ServiceLead';
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    REVERT;
    
    
    
  12. Consulte los datos en el contexto del usuario ServiceManager:

    EXECUTE AS USER = 'ServiceManager';
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    REVERT;
    
    
    
  13. Consulte los datos en el contexto del usuario ServiceHead:

    EXECUTE AS USER = 'ServiceHead';
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    REVERT;
    
    
    
  14. Para revocar permisos UNMASK, use las siguientes instrucciones T-SQL:

    REVOKE UNMASK ON Data.Membership(FirstName) FROM ServiceAttendant;
    REVOKE UNMASK ON Data.Membership FROM ServiceLead;
    REVOKE UNMASK ON SCHEMA::Data FROM ServiceManager;
    REVOKE UNMASK ON SCHEMA::Service FROM ServiceManager;
    REVOKE UNMASK FROM ServiceHead;