遮罩/散列数据

时间:2019-08-29 07:26:16

标签: sql sql-server tsql

作为SQL dba,我需要导出包含一些个人/敏感信息的数据,例如国家识别号(NiN)。此字段是10位数字的唯一编号,根据我们公司的政策,不允许导出此类数据。无论如何,我可以用NiN生成一个新字段,但是值和长度相同。我需要该值在所有表中保持一致,以便我们可以使用此新字段来联接数据,而不是使用NiN。

我正在考虑使用HashBytes函数,但是它会生成具有不同长度(10位数字)的输出。

数据量巨大,因此避免碰撞很重要。最好的方法是什么?

谢谢

1 个答案:

答案 0 :(得分:0)

首先,我将产生的值的格式更改为与内部版本不同的 。这样可以更轻松地立即查看是否存在问题。

第二,您可以使用诸如sha256之类的哈希算法,该算法不太可能发生冲突。那可能就足够了。

第三,您需要更好地考虑安全要求。我的首选解决方案是拥有一个将内部数字与外部值匹配的查找表。然后,此表用于所有导出和导入之间的转换。这里的建议是使用newid()来生成值并使用GUID来获取外部数据。

但是,这可能不足以满足您的要求。为什么?同一数字随时间推移具有相同的值。因此,尽管您也许可以隐藏甚至忘记内部值,但是给定的外部值仍然与单个数字匹配-将外部记录捆绑在一起。

解决方案是在哈希函数中将其称为“盐”。这样,外部值就可以随时间变化,同时仍映射到相同的内部数字。