0

我正在尝试使用 TDE 加密对数据库(SQL Server 2008 R2 企业版)上的一些敏感信息进行加密。

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

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

但是,在执行“从 users1 中选择 *”时,我无法查看加密列。权限也设置为查看。

请求帮助!

4

1 回答 1

0

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

数据如何“不可见”?

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

select decryptbykey(encryptedpass) from users1;

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

如果你只是

select * from users1;

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

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

于 2015-07-03T18:00:46.920 回答