Solución:
¡Ojalá pudiera votarte 100 puntos solo por pensar en esto! He visto este tema pasado por alto tantas veces que es falso, muy bien hecho. Por lo que tengo entendido, en realidad desea codificar los datos dentro de los campos mismos, y aunque comprendo lo que está tratando de lograr, puede que no sea del todo necesario hacerlo, aunque debe considerarse caso por caso.
La mayoría de las leyes de protección de datos giran en torno a la capacidad de asociar correctamente un dato con una persona, por ejemplo, una fecha de nacimiento o un número de teléfono. Puede cumplir con los requisitos de la ley asegurándose de que cuando mueva sus datos fuera de producción a UAT, se mezclen para que no se vuelvan a asignar fácilmente a la persona original, especialmente cuando se mezclan nombres y apellidos.
Sin embargo, esto no resuelve el problema, por ejemplo, de, digamos, los datos de contacto. Puede cumplir con los requisitos de la ley mezclando los datos, pero los números de teléfono siguen siendo reales, los correos electrónicos siguen siendo reales, etc., simplemente no están asignados a la persona correcta. Para esto, recomiendo si es posible borrar esos datos antes de pasarlos a UAT, Red Gate hace un software llamado Data Generator que puede crear datos de prueba aleatorios para que pueda repoblar los campos con datos con los que se pueda probar.
En cuanto a la codificación de datos: existen muchas aplicaciones que hacen esto por ti y, sinceramente, tienes razón en no querer reinventar la rueda. El que usamos en nuestra empresa es un producto llamado Data Masker por una empresa llamada Net2000. La licencia es bastante barata, funciona extremadamente rápido y no tiene que preocuparse por tener que deshabilitar todas sus restricciones antes de codificar la base de datos.
Por supuesto, puede desarrollar su propia solución si no encuentra nada que cumpla con sus requisitos; si decide hacer esto, le recomendaría encarecidamente utilizar procedimientos CLR para hacerlo, ya que es mucho más flexible que TSQL puro (por no decir que usted no puedo usar TSQL, ver aquí).
Una vez que haya elegido una aplicación para realizar esto por usted, lo siguiente que debe decidir es qué es lo que realmente desea / necesita codificar. Honestamente, su mejor recurso para esto es el equipo legal de su empresa o los auditores de la empresa. Sé que a veces puede que no nos guste trabajar con ellos, pero serán mucho más amables con usted si se acerque a ellos y les haga la pregunta en lugar de intentar hacerlo por su cuenta y equivocarse, no hay absolutamente nada de malo en pedir ayuda. – especialmente cuando es tan importante como este.
Espero que esto te ayude y te deseo buena suerte en tu búsqueda … 😉
El Sr. Brownstone dio en el clavo. Ahora, para ayudarte un poco, aquí está mi función “distorsionada”, que se usa para ofuscar cadenas (¡resultados divertidos con nombres!). Pase una cadena, devuelve una cadena distorsionada. Inclúyalo en declaraciones de actualización contra columnas de cadena. Cambie la longitud de los datos como mejor le parezca.
---------------------
-- Garble Function --
---------------------
-- Make a function to slightly garble the strings
IF (object_id('fn_Garble') is not null)
drop function fn_Garble
go
create function fn_Garble
(
@String varchar(255)
)
returns varchar(255)
as
BEGIN
select @String = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@String,'o','e'),'a','o'),'i','a'),'u','i'),'t','p'),'c','k'),'d','th'),'ee','e'),'oo','or'),'ll','ski')
return @String
END
go
Tenía que hacer esto para los datos de ventas minoristas de mis clientes. Para los nombres, fui al censo y descargué todos los nombres y apellidos, los ejecuté en un bucle para unirlos desde el principio hasta el último, agregué el código de sexo y lo cargué en una tabla en mayúsculas. Luego tuve una mesa con unos 400 millones de nombres únicos. Usé mayúsculas ya que nuestros datos actuales no estaban en mayúsculas, por lo que pude distinguir más fácilmente los datos que se borraron.
Cuando borré mis datos de usuario, cambié los nombres, para el cumpleaños puse a todos en el 1 de enero del año en que realmente nacieron y actualicé los números de teléfono con su código postal (mis datos eran solo de EE. UU.). Las direcciones de correo electrónico se convirtieron en la primera inicial más el apellido @ mycompany.co. La dirección postal me dio más pena, pero conservé la ciudad, el estado y el código postal porque creo que no serán un problema si se cambia la dirección. Tenía un compañero de trabajo que tenía un programa que generaba letras confusas y actualizaba la línea de dirección con eso.
En cualquier lugar donde tenía datos duplicados pero todavía tenía un FK para el usuario principal (mal diseño, sí, pero no el mío), también actualicé esos datos para que el nombre fuera consistente en toda la base de datos para el usuario x.
En general, mis datos seguían siendo muy legibles, aunque la dirección no tenía ningún sentido. Me tomó un par de días lograr que todo esto funcionara, pero una vez que lo hice y se creó un trabajo de agente SQL, pude borrar los datos en tan solo 15 minutos.