SQL Server:加密的列内容不可见



我正在尝试使用TDE加密来加密数据库(SQL Server 2008 R2 Enterprise Edition(上的一些敏感信息。

这是我正在做的测试代码:

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中选择*"时,我无法查看加密的列。权限也设置为查看。

请求帮助!

encryptedpass的列数据类型应该是varbinary,而不是varchar。

数据如何"不可见"?

您应该能够打开对称密钥,然后使用decryptbykey函数查询列,例如

select decryptbykey(encryptedpass) from users1;

(您可能还想将结果强制转换回varchar。(

如果你只是

select * from users1;

然后您应该在encryptedpass列中看到二进制数据(列数据类型为varbinary(。

请注意,这不是"TDE"——您使用的是"列级"或"单元级"加密。使用TDE时,整个数据库都是透明加密的,不需要encryptbykey/decryptbykey。参见透明数据加密(TDE(。

最新更新