从数据库中删除隐私数据?

时间:2011-09-01 16:23:26

标签: sql tsql privacy

说我需要与合作伙伴共享数据库。显然我在该数据库中有客户信息。如果没有通过并识别包含隐私信息的每个列和用于“清理”数据的自定义脚本,是否有任何工具或脚本可以清理数据,但保持格式(例如,如果字符串为5)字符,它会保留5个字符,只擦洗)?

如果没有,你会如何实现这样的目标,最好是在TSQL中?

3 个答案:

答案 0 :(得分:1)

您可以考虑仅共享VIEW,创建VIEW以隐藏您不想共享的数据。

示例:

CREATE VIEW v_customer
AS
SELECT 
   NAME,
   LEFT(CreditCard,5) + '****' As CreditCard  -- OR, don't show this column at all
   ....
FROM customer

答案 1 :(得分:1)

首先,我需要说明我为IBM工作的专业兴趣,它拥有完全符合这一要求的工具。

步骤1.确保您识别所有PII(个人身份信息)。在共享数据库信息时,通常会找到像“name”这样的明显列名,但您还需要找到“隐藏”数据,其中数据以标准格式嵌入,例如string-name-string和column name是像“参考代码”或在自由格式文本字段中。正如你所看到的,除非你自动化,否则这不是一件容易的事。用于此的工具是InfoSphere Discovery

步骤2.“清理”数据需要处于什么上下文中。将测试字段更改为随机字符时,在测试时会出现问题,因为用户关注文本错误而不是功能失败,因此将名称更改为真实但虚构。信用卡信息通常需要“有效”。我的意思是它需要有一个有效的前缀说49XX,但其余的序列无效。最后,您需要确保通过数据库传播每个更改实例以保持一致性。用于此的工具是具有数据隐私选项的Optim Test Data Management。

这两个工具集成在一起,提供完整的数据隐私解决方案。

答案 2 :(得分:0)

根据原始问题,您似乎需要字段长度相同,但不是“有效”格式?怎么样:

UPDATE customers
   SET email = REPLICATE('z', LEN(email))
       -- additional fields as needed

根据需要复制/粘贴并重命名表格/字段。我认为你很难找到一个工作量较少的工具,除非你的模式非常复杂,或者我的格式假设不正确。

我现在面前没有MSSQL数据库,但您也可以通过以下方式找到所有类似字符串的列:

SELECT *
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE DATA_TYPE IN ('...', '...')

我不记得你需要比较的确切值,但是如果你运行查询并看看它们是什么,它们应该是非常明显的。