У меня большая база данных в SQL Server 2014 Enterprise. Он содержит около 50 миллионов строк данных в конкретной таблице. Эта таблица имеет 7 зашифрованных столбцов; Лицензия одна. С этой колонкой обращаются в таком виде:
select *
from table
where license = encryptbypassphrase (license)
Этот хеш-код никогда не бывает прежним и в результате не высылается мне. Как я могу зашифровать или как вызвать этот запрос?
Я тестировал, используя:
encryptbypassphrase
encryptbykey
encryptbycertificate
- функция, но производительность с этой функцией очень плохая
Код:
CREATE FUNCTION [encripta3]
(@entrada VARCHAR(1000))
RETURNS VARCHAR(4000)
AS
BEGIN
IF @entrada IS NULL
SET @entrada = '<NULL />'
IF @entrada = ''
SET @entrada = '<EMPTY />'
DECLARE @valbin VARBINARY(10) = 0
DECLARE @valhex VARCHAR(20) = ''
DECLARE @pos INT = 1
DECLARE @caracter VARCHAR(1) = ''
DECLARE @longitud INT = LEN(@entrada)
DECLARE @salida VARCHAR(4000) = ''
DECLARE @relleno INT = 0xeb459
SET @salida = RIGHT(master.dbo.fn_varbintohexstr(@longitud), 3)
WHILE @pos < LEN(@entrada) + 1
BEGIN
SET @caracter = SUBSTRING(@entrada, @pos, 1)
SET @valbin = UNICODE(@caracter)
SET @valhex = RIGHT(master.dbo.fn_varbintohexstr(@valbin), 3) +
RIGHT(master.dbo.fn_varbintohexstr(@relleno), 3)
SET @relleno = @relleno - 1
SET @salida = @salida + @valhex
SET @pos = @pos + 1
END
WHILE len(@salida) < 30
BEGIN
SET @valhex = RIGHT(master.dbo.fn_varbintohexstr(@relleno), 1)
SET @relleno = @relleno - 1
SET @salida = @salida + @valhex
END
RETURN @salida