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 ;