如何在视图中屏蔽/加密数据但保持值的唯一性?

时间:2018-10-15 06:48:52

标签: sql-server encryption

说我在SQL Server表中有一列,其中包含以下条目:

+----+
|id's|
+----+
|489 |
|633 |
|251 |
|633 |
+----+

我想为同事提供一个视图,该视图屏蔽/加密此列,但仍然允许值的唯一性,即:

+----+
|id's|
+----+
|xx  |
|zz  |
|yy  |
|zz  |
+----+

达到此结果的最佳功能是什么?

1 个答案:

答案 0 :(得分:1)

一种解决方法是使用哈希函数。我们想要一个无冲突的哈希,这当然是不存在的,但是对于所有实践目的,大多数密码哈希都是无冲突的。所以:

declare @t table (id varchar(30))
insert into @t(id) values
('489'),
('633'),
('251'),
('633')

select id,HASHBYTES('SHA2_256',id)
from @t

哪个会产生:

id    
----- --------------------------------------------------------------------
489   0xE4BE97CE765E6CFCD703884CC31DB7478FA7BEFCA7CF6DC15420BA20ED718ABE
633   0xB6B1B469EA43C90A602E7AE3BDEA001B11F66C17337DEC23DF0B0249542357EE
251   0xC75D3F1F5BCD6914D0331CE5EC17C0DB8F2070A2D4285F8E3FF11C6CA19168FF
633   0xB6B1B469EA43C90A602E7AE3BDEA001B11F66C17337DEC23DF0B0249542357EE

当然,有些人会抱怨使用掩码值的时间太长了-但是请注意,将这些值截短到较短的值都会增加发生冲突的风险。只有您可以决定是否可以接受碰撞。