Можно ли использовать симметричные ключи в представлении? - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть View, который я хочу изменить с условием. Но я хочу использовать симметричный ключ внутри вида. Ниже мой код:

create view dbo.[Test_view]
select

t.med_id,
t.medicine_name,
case when 
    t.taxo_id like '%include%' then '1'
    else '0' end as 'Taxo_number' ----The taxo_id is encrypted column
from dbo.Meds t

Я хочу включить еще один столбец в представление «Taxo_number», основанное на столбце taxo_id, зашифрованном с помощью симметричного ключа.

My key is: OPEN SYMMETRIC KEY [Test_Key] DECRYPTION BY CERTIFICATE [Test_Cert]

Есть ли способ включить этот ключ в скрипт «Просмотр»? Просьба помочь!

1 Ответ

1 голос
/ 26 апреля 2019

Ты уверен, что можешь. Вот POC:

use tempdb;
go

create symmetric key [mykey] 
    WITH ALGORITHM = AES_256  
    ENCRYPTION BY PASSWORD = 'SouperSecretz>789'
go

create table dbo.Secrets (
    Secret varbinary(400)
)
go

create view dbo.openSecrets
as
    select cast(decryptbykey(Secret) as varchar(200)) as OpenSecret
    from dbo.Secrets
go

open symmetric key [mykey] 
    DECRYPTION BY PASSWORD = 'SouperSecretz>789'
go

insert into dbo.Secrets (Secret)
values (ENCRYPTBYKEY(KEY_GUID('myKey'), 'asdfasdf'));


select *
from dbo.openSecrets;

close symmetric key [mykey];

select *
from dbo.openSecrets;

В этой демонстрации я создаю:

  • симметричный ключ
  • таблица, в которой будут храниться данные, зашифрованные этим ключом
  • представление поверх этой таблицы, которое выполняет расшифровку

Из двух выборов, которые я делаю против просмотра, у одного из них ключ открыт, а у другого нет. Первый показывает открытый текст, а второй возвращает null.

Итак, если у вас открыт ключ в сеансе, вы сможете видеть данные в виде открытого текста. А если нет, то вы (успешно) получите null для этого столбца.

...