如何通过加扰敏感数据将数据子集从生产迁移到开发?

How to migrate subset of data from production to develop by scrambling sensitive data?

我喜欢创建一个工具来打乱生产敏感数据并将其添加到另一个开发数据库中。我已经构建了几个脚本,可以生成随机社会保险号、更改出生日期、打乱电子邮件等。但是当我们对该专栏进行引用时,我遇到了一个问题。

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

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

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

选项包括:

设计数据库,使像 SSN 这样的重要事实首先不是内部密钥(为时已晚)。

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

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

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

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

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