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