如何通过加密敏感数据来迁移生产中的数据子集以进行开发?

问题描述:

我喜欢创建一个工具来对生产敏感数据进行扰频并将其添加到另一个开发数据库中。我制作了一些随机社会安全号码,转移出生日期,争夺电子邮件等的脚本。但是,我们在为该专栏提供参考时面临一个问题。如何通过加密敏感数据来迁移生产中的数据子集以进行开发?

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

表B具有tableA的forieng键(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 

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

选项包括:

设计数据库,以便像SSN一个重要的事实是不是摆在首位(来不及做到这一点)内部密钥。 (如果数据库中的SSN并不代表一个重要的事实,那么可能不需要在开发副本中对其进行更改,因为它仅在生产中与真实的个人数据连接时暴露出有意义的数据,而您)

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

将数据复制到对表没有参照约束的数据库;改变你喜欢的数据,但用正确的关系来完成;将数据再次复制到存在约束条件的另一个数据库中。

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

生成匿名身份数据的标准工具可能对您有用。对于名字,我已经使用了一个合理而独特的名字列表和一个姓氏列表,两个不同的素数长度(或“共同素数”)的列表。以(半随机)顺序从一个列表中取出名称,并从另一个列表中依次从列表的末尾返回到起始位置。在所有配对使用一次之前,不应重复名称组合。我的名单中包括一个“*”拼写,作为姓氏,因为我认为制作一个“*辛格”会很挑衅。我也没有想到使用“hsggghhgh”,但可以使用“User101first”和“User101last”等。

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