Sky*_*Sky 47 sql-server sql-server-2008-r2
SQL Server 中数据混淆的最佳实践是什么?
我们想在我们的 UAT 系统中使用屏蔽的生产数据。
如果我们想快速完成,并且混淆程度更高,应该采取什么方法?我正在考虑角色争夺人们的名字和姓氏,但如何?我应该自己创建一个函数还是有任何可用的预定义函数?我不想花时间重新发明轮子:)
日期字段怎么样?例如,是否应该从整个表中随机选择出生日期并分配给记录,或者有更好的方法吗?
Wor*_*DBA 29
我希望我能仅仅因为想到这个就给你100分!我已经多次看到这个主题被忽视了,这是不真实的 - 做得很好。根据我的理解,您实际上想要在字段本身内打乱数据,尽管我理解您想要实现的目标,但可能没有必要这样做 - 尽管应该逐案考虑。
大多数数据保护法都围绕着将一段数据与个人正确关联的能力——例如出生日期或电话号码。您可以通过确保将数据从生产中移至 UAT 时将其混杂在一起,从而使其不容易重新映射到原始人,从而满足法律要求 - 特别是当您混杂姓名时。
但是,这并没有解决问题,例如让我们说联系方式。您可以通过混淆数据来满足法律要求,但电话号码仍然是真实的,电子邮件仍然是真实的等等......它们只是没有分配给正确的人。为此,我建议如果在将数据传递到 UAT 之前尽可能清除该数据,Red Gate 做一个名为Data Generator的软件,它可以为您创建随机测试数据,以便您可以使用可以测试的数据重新填充字段。
至于数据加扰:有许多应用程序可以为您执行此操作,老实说,您不想重新发明轮子是正确的。我们公司使用的产品是Net2000公司生产的一种名为Data Masker的产品。许可证非常便宜,运行速度非常快,您不必担心在打乱数据库之前必须禁用所有约束。
如果您没有找到满足您要求的任何东西,您当然可以推出自己的解决方案 - 如果您决定这样做,我强烈建议您使用 CLR 过程来做到这一点,因为它比纯 TSQL 灵活得多(并不是说您不能使用 TSQL,请参见此处)。
一旦您选择了一个应用程序来为您执行此操作,接下来您需要决定的是您真正想要/需要加扰的是什么?老实说,您最好的资源是您公司的法律团队和/或公司审计师。我知道有时我们可能不喜欢和他们一起工作,但他们会更好地接近你并问他们问题,而不是试图自己做并出错,寻求帮助绝对没有错- 尤其是当它和这个一样重要的时候。
我希望这对你有帮助,我祝你在你的追求中好运...... ;-)
dat*_*god 11
布朗斯通先生一针见血。现在来帮助你一下,这是我的“乱码”函数,用于混淆字符串(有趣的结果与名称!)。传入一个字符串,返回一个乱码。将其包含在针对字符串列的更新语句中。根据需要更改数据长度。
---------------------
-- Garble Function --
---------------------
-- Make a function to slightly garble the strings
IF (object_id('fn_Garble') is not null)
drop function fn_Garble
go
create function fn_Garble
(
@String varchar(255)
)
returns varchar(255)
as
BEGIN
select @String = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@String,'o','e'),'a','o'),'i','a'),'u','i'),'t','p'),'c','k'),'d','th'),'ee','e'),'oo','or'),'ll','ski')
return @String
END
go
Run Code Online (Sandbox Code Playgroud)
小智 7
我必须为我的客户零售销售数据执行此操作。对于名字,我去人口普查并下载了所有的名字和姓氏,通过循环运行它们以连接每个第一个到最后一个,添加性别代码并将其以全部大写形式加载到表格中。然后我有一个包含大约 4 亿个唯一名称的表。我使用大写,因为我们当前的数据不是大写的,所以我可以更容易地分辨出被擦洗的数据。
当我清理我的用户数据时,我换掉了名字,生日时我把每个人都放在他们实际出生的那一年的 1 月 1 日,并用他们的邮政编码更新任何电话号码(我的数据仅限美国)。电子邮件地址成为首字母加姓氏@mycompany.co。邮政地址给了我最大的悲痛,但我保留了城市、州和邮政编码,因为我相信如果地址更改,它们不会成为问题。我有一个同事,他有一些程序会生成乱码并用它更新地址行。
在我复制了数据但仍然对主要用户有 FK 的任何地方(糟糕的设计是的,但不是我的)我也更新了该数据,以便用户 x 的名称在整个数据库中保持一致。
总的来说,尽管地址没有任何意义,但我的数据仍然非常可读。我花了几天时间才完成所有这些工作,但是一旦完成并创建了 sql 代理作业,我就可以在短短 15 分钟内清理数据。
| 归档时间: |
|
| 查看次数: |
28988 次 |
| 最近记录: |