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

Sql 从数据库中删除隐私数据?,sql,tsql,privacy,Sql,Tsql,Privacy,假设我需要与合作伙伴共享一个数据库。显然,我在那个数据库里有客户信息。除了浏览和识别包含隐私信息和自定义脚本的每一列以“清理”数据外,是否有任何工具或脚本可以清理数据,但要保持格式得体(例如,如果一个字符串是5个字符,它将保留5个字符,仅清理) 如果没有,你会如何做到这一点,最好在TSQL? < P>你可以只考虑共享视图< /代码>,创建视图来隐藏你不想共享的数据。 例如: CREATE VIEW v_customer AS SELECT NAME, LEFT(CreditCard

假设我需要与合作伙伴共享一个数据库。显然,我在那个数据库里有客户信息。除了浏览和识别包含隐私信息和自定义脚本的每一列以“清理”数据外,是否有任何工具或脚本可以清理数据,但要保持格式得体(例如,如果一个字符串是5个字符,它将保留5个字符,仅清理)


如果没有,你会如何做到这一点,最好在TSQL?

< P>你可以只考虑共享<代码>视图< /代码>,创建视图来隐藏你不想共享的数据。 例如:

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

首先,我需要陈述我在IBM工作的职业兴趣,IBM有专门的工具来完成这项工作

第一步。确保您识别所有PII(个人识别信息)。共享数据库信息时,通常会找到明显的列名,如“name”,但您还需要找到“隐藏”数据,其中数据嵌入标准格式,如字符串名称字符串,列名类似于“reference code”,或位于自由格式文本字段中。正如您所看到的,除非您将其自动化,否则这将不是一件容易的工作。这方面的工具是InfoSphere Discovery

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


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

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

UPDATE customers
   SET email = REPLICATE('z', LEN(email))
       -- additional fields as needed
根据需要复制/粘贴和重命名表/字段。我想你很难找到一个工作量更少的工具,除非你的模式非常复杂,或者我的格式假设不正确

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

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

我不记得您需要比较的确切值,但是如果您运行查询并查看其中的内容,它们应该是不言自明的。

我认为这有点模糊。在这种情况下,“私人”是什么?在数据库仍然有用的情况下,您可以删除多少?我假设,既然您标记了这个tsql,那么您使用的是sql server?sql server的哪个版本?您的数据库中没有存储抄送信息。如果你这样做了,你需要遵守昨天的规定。以及