我正在寻找对很大的postgres数据库中的数据进行混淆的方法,并且希望能够逐步进行。我在想的是,我可以向前滚动名称的字符的字符之类的东西,但是我需要一种方法来判断它是否已应用于该“名称”?有什么想法吗?如果可以通过is_changed()这样的方式进行操作,那么每天就可以很轻松地重播差异。
我非常想在数据库中找到所有第一/最后/ mobile / email并将其更改,但不要更改为垃圾。另外,一些名称在jsonb列中只是为了使其更加复杂;)
欢呼
答案 0 :(得分:0)
基本上,我决定做一个文本pg_dump并编写一个脚本解决方案,该解决方案使用相同的模式修改所有相关数据。这样可以在混淆完成后保持关系。
与跨大型数据集的sql +更新相比,它也更加简单和高效。
如果有人有更好的主意,还是要开放其他想法。
答案 1 :(得分:0)
如果您不十分担心结果文本的混淆性,那么也许postgres中包含的哈希函数之一就足够了,例如md5
就足够了。
UPDATE person p SET p.name = MD5(p.name::text);
可能的 actual 实现可能涉及使用pgcrypto
模块对值进行编码,但这并不是非常有效。
https://www.postgresql.org/docs/9.6/static/pgcrypto.html
UPDATE person p SET p.name = crypt(p.name::text, gen_salt('test'));
但是正如我在评论中问的那样,您要防范的威胁特征是什么?混淆可能不是减轻数据泄露影响的好方法。