0

我喜欢创建一个工具来打乱生产敏感数据并将其添加到另一个开发数据库中。我已经构建了几个脚本来生成随机社会安全号码、改变出生日期、扰乱电子邮件等。但是当我们有该专栏的参考时我遇到了一个问题。

For example:- if we scramble tables tableA and TableB,

TableB 有一个来自 tableA(ssn) 的外键

 TableA
    ssn firstName                  lastName
    .......................................
    111   arun                        prasanth                 
    222   ann                         antony                   
    333   sruthy                      abc                      
    666   new                         abc     




TableB(ssn Foreign key reference)
id  ssn   Place
................
1   111   kerala
2   222   usa
3   333   ekm
5   666   chennai

期望的输出应该是

 TableA
    ssn firstName                  lastName
    .......................................
    999   gdfsgs                    trttr
    956   hsggghhgh                 pipip
    855   hdsgfgsddd                lklkl
    233   ghfgfggfgf                mkmk




TableB(ssn Foreign key reference)
id  ssn   Place
................
1   999   kerala
2   956   usa
3   855   ekm
5   233   chennai
4

2 回答 2

1

您可以尝试使用一些加扰工具,也可以创建一个生成类似哈希码的算法。如果输入值相同,您的算法应始终生成相同的值。例如:- 111 的生成值应始终为 999。

于 2017-10-09T12:32:21.350 回答
1

由于您的开发环境显然强制执行外键关系,因此更改键的值是一个问题。

选项包括:

设计数据库,以便像 SSN 这样的重要事实一开始就不是内部密钥(这样做为时已晚)。

(如果您数据库中的 SSN 不代表一个重要事实,那么可能没有必要在开发副本中更改它,因为它仅在连接到您正在删除的生产中的真实个人数据时才会公开有意义的数据。但是你和你的同事可能不同意我的观点。)

一次更改一个 SSN 的数据 - 例如在 TableA 中输入一行 000、Proxy、Proxy;将其他表中所有111的SSN改为000;将 TableA 中的 SSN 111 更改为 999;将其他表中的所有 SSN 000 更改为 999。我在生产数据中这样做了,当时有人在不同的数据库中记录了两个不同的服务 ID,我们需要将来自两个 ID 的数据合并在一起。

将数据复制到对表没有引用约束的数据库;随心所欲地更改数据,但以正确的关系结束;再次将数据复制到另一个存在约束的数据库中。

如果语言和设计允许,删除或关闭外键强制,更改您的数据,然后创建或打开外键。但要注意数据库中已经禁用的约束。如果最后你打开了所有被禁用的约束,你也可以打开在你开始之前已经被禁用的约束。

生成匿名身份数据的标准工具可能对您有用。对于名字,我使用了一种方法来获取合理且不同的名字列表和姓氏列表,两个不同的质数长度(或“共同质数”)。从一个列表中按(半随机)顺序取名字,然后从另一个列表中依次从列表的末尾返回到开头。在所有对都使用过一次之前,不应重复名称组合。我的清单包括“Mohamed”的一个拼写,并且作为姓氏,因为我认为产生“Mohamed Singh”会很挑衅。我也没有想到使用“hsggghhgh”,但您可以使用“User101first”和“User101last”等。

于 2017-10-09T16:31:37.437 回答