Как замаскировать / зашифровать данные в представлении, но сохранить уникальность значений? - PullRequest
0 голосов
/ 15 октября 2018

Скажем, у меня есть столбец в таблице SQL Server со следующими записями:

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

Я хотел бы предоставить коллегам представление, которое маскирует / шифрует этот столбец, но при этом допускает уникальность значений,т.е.:

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

Какая функция лучше всего подходит для достижения этого результата?

1 Ответ

0 голосов
/ 15 октября 2018

Одним из способов решения этой проблемы было бы использование хеш-функции.Мы хотим получить хеш без коллизий, который, конечно, не существует, но большинство криптографических хэшей не имеют коллизий для всех практических целей.Итак:

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

Конечно, некоторые люди будут жаловаться, что они слишком длинные, чтобы использовать значения маски - но имейте в виду, что любое усечениеэти более короткие значения увеличивают риск столкновений.Приемлемы ли для вас коллизии, решать вам можете только вы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...