>假设我在 SQL Server 表中有一列包含以下条目:
+----+
|id's|
+----+
|489 |
|633 |
|251 |
|633 |
+----+
我想向同事提供一个视图,该视图屏蔽/加密此列但仍允许值的唯一性,即:
+----+
|id's|
+----+
|xx |
|zz |
|yy |
|zz |
+----+
实现此结果的最佳功能是什么?
解决此问题的一种方法是使用哈希函数。我们想要一个无冲突的哈希,这当然不存在,但大多数加密哈希对于所有实际目的都是无冲突的。所以:
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
当然,有些人会抱怨这些值太长而无法使用掩码值 - 但请注意,将这些值截断为较短值会增加冲突的风险。碰撞是否可以接受只有您自己才能决定。