Compartir a través de


Enmascaramiento de datos dinámicos

Se aplica a:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (solo grupos de SQL dedicados)Base de datos SQL en Fabric

Azure SQL Database, Base de datos SQL de Microsoft Fabric, Azure SQL Managed Instance y Azure Synapse Analytics admiten el enmascaramiento dinámico de datos (DDM). 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 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.

Aspectos básicos del enmascaramiento dinámico de datos

Para Azure SQL Database, configure una directiva de enmascaramiento dinámico de datos en Azure Portal seleccionando el panel Enmascaramiento dinámico de datos en Seguridad en el panel de configuración de SQL Database.

Esta característica no se puede establecer mediante Azure Portal para SQL Managed Instance o Base de datos SQL en Fabric. En su lugar, use Transact-SQL (T-SQL), como en el ejemplo de permiso granular de este artículo. Para obtener más información, consulte Enmascaramiento dinámico de datos.

Directiva de enmascaramiento de datos dinámicos

  • Usuarios de SQL excluidos del enmascaramiento: Un conjunto de usuarios de SQL, que puede incluir identidades de Microsoft Entra ID, que reciben datos desmascarados en los resultados de las consultas 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 inferior a 4 caracteres para los tipos de datos de cadena (nchar, ntext, nvarchar).
    Use un valor cero para los tipos de datos numéricos (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real).
    Se usa 1900-01-01 para los tipos de datos de fecha y hora (date, datetime2, datetime, datetimeoffset, smalldatetime, time).
    Para sql_variant, se usa el valor predeterminado del tipo actual.
    Para XML, se usa 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.

    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.
    Datetime Habilita el enmascaramiento pormenorizado para las columnas de fecha y hora, es decir, datetime, datetime2, date, time, datetimeoffset y smalldatetime. Puede enmascarar componentes específicos, como año (), mes (datetime("Y")datetime("M")), día (datetime("D")), hora (datetime("h")), minuto (datetime("m")) o segundo (datetime("s")). Esta función se aplica mediante T-SQL.

    Por ejemplo:

    - Año de máscara: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")').
    - Mes de máscara: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")').
    - Minuto de máscara: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")').

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

Puede configurar el enmascaramiento dinámico de datos con los siguientes roles integrados:

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 o revocar UNMASK permisos en el nivel de base de datos, en el nivel de esquema, en el nivel de tabla o en el nivel de columna a cualquier usuario o rol de base de datos. Junto con la autenticación de Microsoft Entra, UNMASK los permisos se pueden administrar para usuarios, grupos y aplicaciones que se mantienen en su entorno de Azure. El UNMASK permiso 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. 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. Conceda permisos diferentes UNMASK a los usuarios:

    • Conceda permiso de columna de nivel UNMASK a ServiceAttendant:

      GRANT UNMASK ON Data.Membership (FirstName) TO ServiceAttendant;
      
    • Conceda permiso a nivel de tabla UNMASK a ServiceLead:

      GRANT UNMASK ON Data.Membership TO ServiceLead;
      
    • Conceda permiso de nivel UNMASK de esquema a ServiceManager:

      GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
      GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
      
    • Conceda permiso de nivel UNMASK de base de datos a 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 UNMASK permisos, 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;