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

时间:2017-10-09 11:08:12

标签: mysql database database-migration scramble

我喜欢创建一个工具,它会对生产敏感数据进行加密,并将其添加到另一个开发数据库中。我已经构建了几个脚本,这些脚本可以随机提供社会安全号码,转移出生日期,争夺电子邮件等等。但是当我们为该列提供参考时,我遇到了一个问题。

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

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

 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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

选项包括:

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

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

一次更改一个SSN的数据 - 例如在TableA中输入一行000,代理,代理;将其他表中111的所有SSN更改为000;将TableA中的SSN 111更改为999;将其他表中的所有SSN 000更改为999.我在生产数据中完成了此操作,当有人在不同数据库中记录了两个不同的服务ID时,我们需要将两个ID中的数据合并在一起。

将数据复制到对表没有引用约束的数据库;随时改变数据,但要以正确的关系完成;将数据再次复制到存在约束的另一个数据库中。

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

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