Enmascaramiento de datos dinámicos

Se aplica a:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (solo grupos SQL dedicados)

Azure SQL Database, Instancia administrada de Azure SQL y Azure Synapse Analytics admiten el enmascaramiento dinámico de datos. El enmascaramiento dinámico de datos limita la exposición de datos confidenciales mediante su enmascaramiento para los usuarios sin privilegios.

El enmascaramiento dinámico de datos ayuda a evitar el acceso no autorizado a datos confidenciales al permitir que los clientes designen la cantidad de datos confidenciales que se revelarán con un efecto mínimo en la capa de aplicación. Se trata de una característica de seguridad basada en directivas 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 servicios de un centro de llamadas podría identificar al 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 a tal representante. Se puede definir una regla de enmascaramiento que oculte toda la dirección de correo electrónico en el 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.

Aspectos básicos del enmascaramiento dinámico de datos

Para configurar una directiva de enmascaramiento de datos dinámicos en Azure Portal, se selecciona el panel Enmascaramiento de datos dinámicos en Seguridad en el panel de configuración de SQL Database. Esta característica no se puede establecer mediante el portal para SQL Managed Instance. Para obtener más información, vea Dynamic Data Masking.

Directiva de enmascaramiento de datos dinámicos

  • Usuarios de SQL excluidos del enmascaramiento: conjunto de usuarios de SQL, que pueden ser identidades de Microsoft Entra ID (anteriormente Azure Active Directory) que obtendrán datos sin máscara en los resultados de una consulta SQL. Los usuarios con derechos administrativos, como el rol de administrador de servidores, administrador de Microsoft Entra o db_owner, pueden ver los datos originales sin ninguna máscara. (Nota: También se aplica al rol sysadmin en SQL Server)
  • 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 datos para diferentes escenarios.
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 menos) si el tamaño del campo es menor de 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 los tipos de datos especiales (timestamp, table, 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.

Captura 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

Captura 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 el 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 más columnas, seleccione la función de enmascaramiento adecuada y seleccione Guardar para aplicar una máscara a estos campos.

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

Configuración del enmascaramiento de datos dinámicos 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 directivas de enmascaramiento de datos mediante programación. Las API de REST publicadas admiten las siguientes operaciones:

Directivas de enmascaramiento de datos

  • Crear o 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/escritura:

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

Lectura:

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

Escritura:

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

Para obtener 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 control mediante el enmascaramiento a un usuario no autorizado en distintos niveles de la base de datos. Puede conceder los permisos UNMASK a cualquier usuario o rol de base de datos, o bien revocarlo, en los niveles de base de datos, esquema, tabla o columna. En combinación con la autenticación de Microsoft Entra, los permisos UNMASK se pueden administrar para los usuarios, grupos y aplicaciones que se mantienen en su entorno de Azure. El permiso UNMASK proporciona una manera más detallada de controlar y limitar el acceso no autorizado a los datos almacenados en la base de datos y a mejorar la administración de la seguridad de los datos.

  1. Creación de un esquema que contenga tablas de usuario:

    CREATE SCHEMA Data;
    GO
    
  2. Creación de una tabla con columnas enmascaradas:

    CREATE TABLE Data.Membership (
        MemberID INT IDENTITY(1, 1) NOT NULL,
        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. Inserción de 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. Creación de un esquema que contenga tablas de servicio:

    CREATE SCHEMA Service;
    GO
    
  5. Creación de una tabla de servicios con columnas enmascaradas:

    CREATE TABLE Service.Feedback (
        MemberID INT IDENTITY(1, 1) NOT NULL,
        Feedback VARCHAR(100) MASKED WITH (FUNCTION = 'default()') NULL,
        Rating INT MASKED WITH (FUNCTION = 'default()'),
        Received_On DATETIME
    );
    
  6. Inserción de 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. Creación de diferentes usuarios 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. Concesión de 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. Concesión de diferentes permisos UNMASK 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. Consulta de 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. Consulta de 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. Consulta de 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. Consulta de 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;