es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear una función personalizada para el enmascaramiento dinámico de datos.

Estoy probando la Enmascaramiento de Datos Dinámicos y descubrí que SQL Server propone solo 4 funciones por defecto:

Función Ejemplos
Predeterminado Ejemplo de sintaxis de alteración: ALTER COLUMN Género ADD MASKED WITH (FUNCTION = ‘default ()’)
Correo Ejemplo de sintaxis de alteración: ALTER COLUMN Correo electrónico ADD MASKED WITH (FUNCTION = ’email ()’)
Aleatorio Ejemplo de sintaxis de alteración: ALTER COLUMN [Mes] ADD MASKED WITH (FUNCTION = ‘random (1, 12)’)
Cadena personalizada Ejemplo de sintaxis de alteración: ALTER COLUMN [Número de teléfono] ADD MASKED WITH (FUNCTION = ‘partial (1,” XXXXXXX “, 0)’)

Quiero usar la última opción, Cadena personalizada, porque necesito:

  • Mantener 3 números prefijos
  • Barajar 3 números en el medio
  • Mantener los últimos 3 números

Entonces, este número de teléfono 123-456-789 se convertirá en 123-039-789

Mi primer enfoque es anidar dos funciones de la siguiente manera:

ALTER TABLE [Person].[PersonPhone]
ALTER COLUMN [PhoneNumber] NVARCHAR(25) MASKED
    CON (FUNCTION = 'partial(4," ' + (FUNCTION = 'random(100,999)') + ',"4)');

¿Cómo puedo ejecutar una función dentro de otra función?

¿O hay alguna otra opción para crear una MASK personalizada?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para ejecutar una función dentro de otra, simplemente puedes usar la sintaxis NOMBRE_DE_FUNCION(PARAMETRO_1, NOMBRE_DE_FUNCION(PARAMETRO_2), PARAMETRO_3). Así que en este caso, puedes anidar la función random() dentro de la función partial() de esta manera:

    ALTER TABLE [Person].[PersonPhone]
    ALTER COLUMN [PhoneNumber] NVARCHAR(25) MASKED
        WITH (FUNCTION = 'partial(3, ' + 
            'FUNCTION(''random(100, 999)'')' + 
            ', 3)'
        );
    

    Esto reemplazará los 3 dígitos del medio con números aleatorios entre 100 y 999.

    Otra opción para crear una máscara personalizada es crear una función de mascarado definida por el usuario (UDMF). Las UDMF te permiten definir tu propia lógica de mascarado utilizando código T-SQL. Luego puedes hacer referencia a tu UDMF en la cláusula MASKED WITH.

    Aquí tienes un ejemplo de cómo crear una UDMF para lograr el mismo resultado que el enfoque de función anidada:

    CREATE FUNCTION [dbo].[MyCustomMask] (@inputString NVARCHAR(25))
    RETURNS NVARCHAR(25)
    WITH SCHEMABINDING
    AS
    BEGIN
        -- Mantén los primeros 3 caracteres
        DECLARE @outputString NVARCHAR(25) = LEFT(@inputString, 3)
    
        -- Reemplaza los 3 caracteres del medio con números aleatorios
        SET @outputString += CONVERT(NVARCHAR(3), ABS(CHECKSUM(NEWID())) % 900 + 100)
    
        -- Mantén los últimos 3 caracteres
        SET @outputString += RIGHT(@inputString, 3)
    
        RETURN @outputString
    END
    

    Luego puedes utilizar esta función en la cláusula MASKED WITH:

    ALTER TABLE [Person].[PersonPhone]
    ALTER COLUMN [PhoneNumber] NVARCHAR(25) MASKED
        WITH (FUNCTION = 'dbo.MyCustomMask()');
    

    Ten en cuenta que la creación de UDMF requiere algunos conocimientos avanzados de T-SQL y debe ser probada minuciosamente antes de su implementación en un entorno de producción.

Comments are closed.