作为SQL,我需要导出具有一些个人/敏感信息的数据,例如国家标识号(NiN)。该字段是一个10位数的唯一数字,根据我们公司的政策,它不允许输出此类数据。不管怎么说,我可以用NiN生成一个新字段,但值不同,长度相同。我需要这个值在所有表中保持一致,这样我们就可以使用这个新字段来连接数据,而不是使用NiN。
我正在考虑HashBytes
函数,但它生成一个长度不同的输出(10位数)。
数据是巨大的,所以避免冲突是很重要的。做这件事最好的方法是什么?
谢谢
发布于 2019-08-29 03:43:06
首先,我将更改产生值的格式,使其与内部版本不同。如果有问题的话,马上看就会简单得多。
其次,您可以使用哈希算法(如sha256 ),这种算法不太可能有冲突。那可能就够好了。
第三,您需要更好地考虑安全性需求。我喜欢的解决方案是有一个查找表,它将内部数字与外部值相匹配。然后,该表用于所有导出和导入,以在两者之间进行转换。这里的建议是使用newid()
生成值,并对外部数据使用GUID。
但是,这可能不足以满足您的需求。为什么?随着时间的推移,相同的数字具有相同的值。因此,尽管您可能能够隐藏内部值,甚至忘记它,但给定的外部值仍然与单个数字匹配--将外部记录绑定在一起。
解决这一问题的方法是哈希函数中的一种叫做“盐”的方法。这允许外部值随时间变化,同时仍然映射到相同的内部编号。
https://stackoverflow.com/questions/57705113
复制