2015-07-02 2 views
0

Я пытаюсь зашифровать некоторую конфиденциальную информацию в базе данных (SQL Server 2008 R2 Enterprise Edition) с использованием шифрования TDE.SQL Server: содержимое зашифрованного столбца не отображается

Это тестовый код, который я делаю:

use test1 
create table users1(pid int not null, username varchar(20), pass varchar(20), encryptedpass varchar(5000)) 
GO 

insert into users1 values(123456, 'mark', 'qwerty', '') 
insert into users1 values(123448, 'katy', 'poiuytr', '') 
insert into users1 values(147384, 'dick', '567tgbyhn', '') 
insert into users1 values(844749, 'sam', 'ujnuhbygv', '') 
insert into users1 values(585948, 'max', 'wsxedcrfv', '') 
insert into users1 values(383929, 'jake', '1qaz2wsx', '') 

CREATE MASTER KEY ENCRYPTION BY 
PASSWORD = 'MaxSecurity' 
GO 

CREATE CERTIFICATE TestCert1 
WITH SUBJECT = 'Password_Encryption'; 
GO 

CREATE SYMMETRIC KEY Keyx 
WITH ALGORITHM = AES_256 
ENCRYPTION BY CERTIFICATE TestCert1; 
GO 

OPEN SYMMETRIC KEY Keyx 
DECRYPTION BY CERTIFICATE TestCert1; 

UPDATE test1.dbo.users1 
SET encryptedpass = EncryptByKey(key_guid('Keyx'), pass); 

CLOSE SYMMETRIC KEY keyx; 
GO 

Однако, при выполнении «выберите * из пользователями1» Я не в состоянии просмотреть зашифрованный столбец. Разрешения также установлены для просмотра.

Спрашивается справка!

ответ

0

Ваш тип данных столбца для шифрованного пароля должен быть varbinary, а не varchar.

Как данные "не видны"?

Вы должны быть в состоянии открыть симметричный ключ, а затем запросить столбец с функцией decryptbykey, например,

select decryptbykey(encryptedpass) from users1; 

(Вы также можете бросить результат обратно в VARCHAR.)

Если вы просто

select * from users1; 

, то вы должны увидеть двоичные данные в столбце encryptedpass (с типом данных столбца VARBINARY).

Обратите внимание, что это не «TDE» - то, что вы используете, - это шифрование на уровне столбцов или «на уровне ячеек». При использовании TDE вся база данных шифруется, прозрачно, и нет необходимости шифровать ключ/decryptbykey. Ср Transparent Data Encryption (TDE).