Enmascaramiento de datos dinámicos
Se aplica a: Azure SQL Database Azure SQL Managed Instance Azure 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 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 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 T-SQL, como en el Ejemplo de Enmascaramiento dinámico de datos de este artículo. 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. |
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 |
Campos recomendados para enmascarar
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
- Para crear una máscara dinámica de datos, consulte Creación de una máscara dinámica de datos.
- Para agregar o editar una máscara en una columna existente, consulte Adición o edición de una máscara en una columna existente.
- Para conceder permisos para ver datos sin enmascarar, consulte Concesión de permisos para ver datos sin enmascarar.
- Para anular una máscara dinámica de datos, consulte Anulación de una máscara dinámica de datos.
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
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
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
- Crear o actualizar: crea o actualiza una regla de enmascaramiento de datos para la base de datos.
- Lista por base de datos: obtiene una lista de reglas de enmascaramiento de datos para la base 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.
Creación de un esquema que contenga tablas de usuario:
CREATE SCHEMA Data; GO
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 );
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');
Creación de un esquema que contenga tablas de servicio:
CREATE SCHEMA Service; GO
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 );
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');
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
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;
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;
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;
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;
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;
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;
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;