Hola,

Les cuento, hace un tiempo encare un proyecto de anonimizar bases de datos y básicamente arme un vbs (quien sabe, un día lo paso a bash) que recibe como entrada un ini donde se indican los parámetros de configuración de como anonimizar cada tabla, y de esa tabla, que campos necesitan moverse de la mano (en conjunto, ej tipo y nro documento).

Como condición de uso es que la tabla tenga PK y no tenga uniques (se pueden borrar y rearmar al finalizar). Con todo esto, el script genera un update como el siguiente, por cada entrada del ini, o sea pueden ser varios por tabla:

 update public.odusdemo  set    txt = bis.txt, correo = bis.correo  from (          select ori.id, nue.txt, nue.correo          from (                  SELECT  o.id, o.txt, o.correo,                          row_number() OVER (ORDER BY o.id::varchar) AS iddaf_odusdemosacude                  FROM public.odusdemo o          ) ori          inner join          (                  SELECT  p.id, p.txt, p.correo,                          row_number() OVER (ORDER BY md5(random()::varchar)) AS iddaf_odusdemosacude                  FROM public.odusdemo p          ) nue          on nue.iddaf_odusdemosacude = ori.iddaf_odusdemosacude        ) bis  where odusdemo.id = bis.id;


Una vez ejecutado, no se puede volver atrás y, si, hay partes harcodeadas. Le falta bastante para ser algo a gran escala, pero ya lo estoy usando y me gustaría tener algún feedback a ver que les parece. No hay problema en compartir el vbs, incluso estaría bueno encararlo como un proyecto comunitario si alguien se copa en darme una mano.

Gracias por su tiempo, espero les sirva.




On 2017-11-03 13:54, Gilberto Castillo wrote:
Ricardo Alvarado escribió:
Gilberto algo parecido a ese ejemplo pero algo así un ejemplo
http://www.michaelkrenz.de/2012/08/05/how-to-anonymize-data-in-a-postgresql-database/

Ricardo y Alvaro es una buena idea, acá tenemos una aplicación para hacer
eso, pero es privada pues tendrían que dar el algoritmo para pasar los
datos  de un formato  a otro y no lo harán, ni expondrán es información.



[1]
tipo=p
host=192.168.150.90
port=5432
base=db_diego
esquema=public
tabla=odusdemo
random=no
campo=documento
user=postgres
pwd=

[2]
tipo=p
host=192.168.150.90
port=5432
base=db_diego
esquema=public
tabla=odusdemo
random=no
campo=txt,correo
user=postgres
pwd=






drop table odusdemo;

CREATE TABLE public.odusdemo
(
    id serial NOT NULL,
    txt character varying(50),
    documento integer,
    correo character varying(50),
    PRIMARY KEY (id)
);

insert into odusdemo(txt,documento,correo) values ('hola', 27500086, 
'di...@daf.com.ar');
insert into odusdemo(txt,documento,correo) values ('chau', 31624187, 
'h...@daf.com.ar');
insert into odusdemo(txt,documento,correo) values ('quetal', 55002372, 
'b...@daf.com.ar');
insert into odusdemo(txt,documento,correo) values ('comoestas', 
50654789,'c...@daf.com.ar');
insert into odusdemo(txt,documento,correo) values ('quetul', 12246789, 
'n...@daf.com.ar');

select  * from odusdemo ;


 update public.odusdemo
 set    txt = bis.txt, correo = bis.correo
 from (
         select ori.id, nue.txt, nue.correo
         from (
                 SELECT  o.id, o.txt, o.correo,
                         row_number() OVER (ORDER BY o.id::varchar) AS 
iddaf_odusdemosacude
                 FROM public.odusdemo o
         ) ori
         inner join
         (
                 SELECT  p.id, p.txt, p.correo,
                         row_number() OVER (ORDER BY md5(random()::varchar)) AS 
iddaf_odusdemosacude
                 FROM public.odusdemo p
         ) nue
         on nue.iddaf_odusdemosacude = ori.iddaf_odusdemosacude
       ) bis
 where odusdemo.id = bis.id;

 select  * from odusdemo ;

Reply via email to