Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

364
Vistas
Cómo enmascarar dinámicamente columnas específicas de varias tablas en MYSQL

Tengo varias tablas como EMPLOYEE, EMPLOYEEMail y más tablas. Para fines de referencia, estoy poniendo algunos datos de muestra y 2 tablas

 CREATE TABLE EMPLOYEE ( empId INTEGER PRIMARY KEY, name TEXT NOT NULL, dept TEXT NOT NULL, phone bigint ); INSERT INTO EMPLOYEE VALUES (0001, 'Clark', 'Sales',9001234567); INSERT INTO EMPLOYEE VALUES (0002, 'Dave', 'Accounting',9000123456); INSERT INTO EMPLOYEE VALUES (0003, 'Ava', 'Sales',9000012345); CREATE TABLE EMPLOYEEMail ( empId INTEGER PRIMARY KEY, MailID TEXT NOT NULL, AlternateMail TEXT NOT NULL ); INSERT INTO EMPLOYEEMail VALUES (0001, 'hello123@gmail.com','hi123@gmail.com'); INSERT INTO EMPLOYEEMail VALUES (0002, 'good123@gmail.com','bye123@gmail.com'); INSERT INTO EMPLOYEEMail VALUES (0003, 'super123@gmail.com','fast123@gmail.com');

Consulta :

 SELECT CONCAT(SUBSTR(phone, 1, 6), REPEAT('*', CHAR_LENGTH(phone) - 6)) AS masked_phone FROM `EMPLOYEE`; select CONCAT(LEFT(UUID(), 8), '@', SUBSTRING_INDEX(`MailID`, '@', -1)) as phone, CONCAT(LEFT(UUID(), 8), '@', SUBSTRING_INDEX(`AlternateMail`, '@', -1)) as AlternateMail from EMPLOYEEMail;

Producción:

teléfono_enmascarado

 900123**** 900012**** 900001****

teléfono Correo alternativo

 d8883d67@gmail.com d8883d92@gmail.com d8883dd0@gmail.com d8883dde@gmail.com d8883df3@gmail.com d8883dff@gmail.com

Está funcionando bien hasta seleccionar la consulta, pero necesito enmascarar varias columnas, todas vendrán en valores separados por comas como este

 (MailID ,AlternateMail,Phone,SSN,BankAccount,Addrress)

Estoy buscando una declaración de bucle donde compararé estos valores con la tabla Information_schema.columns, cualquiera que sea la columna que coincida con los valores dados.

Estoy tratando de incluirlos en la declaración de selección dinámica con @column y @tablename y cargar los valores enmascarados en la tabla temporal. Por favor sugiérame en esto.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Creo que la subcadena es más bonita que enmascarar direcciones de correo electrónico y, de esta manera, los datos confidenciales permanecerán en secreto.

 SELECT CONCAT("****", SUBSTRING(`EMPLOYEEMail`.`MailID`, LOCATE('@', `EMPLOYEEMail`.`MailID`) - 4 )) AS MailID, CONCAT("****", SUBSTRING(`EMPLOYEEMail`.`AlternateMail`, LOCATE('@', `EMPLOYEEMail`.`AlternateMail`) - 4 )) AS AlternateMail, INSERT(`EMPLOYEE`.`phone`,7,10,"****") as masked_phone FROM EMPLOYEE JOIN EMPLOYEEMail ON EMPLOYEE.empId=EMPLOYEEMail.empId;

Con su solución (completamente enmascarado el nombre de usuario de las direcciones de correo electrónico), la consulta pierde sentido porque nada se refiere a los datos originales.

over 4 years ago · Santiago Trujillo Denunciar

0

¿Por qué no usas el concepto de Vista para lograr esto?. Uno de los beneficios de Views es ocultar información específica de la tabla original o visualizarla de otra manera, sin tocar los datos originales.

En su caso, solo necesita crear una vista con la consulta anterior para ocultar la parte específica del número de teléfono, correo electrónico, etc.

 CREATE VIEW employee_info_encrypted AS SELECT CONCAT(SUBSTR(phone, 1, 6), REPEAT('*', CHAR_LENGTH(phone) - 6)) AS masked_phone, CONCAT(LEFT(UUID(), 8), '@', SUBSTRING_INDEX(`MailID`, '@', -1)) as phone, CONCAT(LEFT(UUID(), 8), '@', SUBSTRING_INDEX(`AlternateMail`, '@', -1)) as AlternateMail FROM `EMPLOYEE` inner join EMPLOYEEMail on EMPLOYEEMail.empId = EMPLOYEE.empId;

Luego, al ejecutar la siguiente consulta, obtendrá la información enmascarada:

 select * from employee_info_encrypted;

Cada vez que desee agregar una nueva columna, por ejemplo, a la respuesta, simplemente cambie el código Ver y cambiará la respuesta según las nuevas condiciones.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda