首页 > 解决方案 > 在 SQL Server 的 ENCRYPTBYKEY 函数中选择查询

问题描述

我正在尝试通过打开对称密钥来解密表列并将其存储在不同的表中,我发现以下查询是错误的:

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 [SymKey] 
    DECRYPTION BY CERTIFICATE [SymCert]
go


insert into dbo.Secrets (Secret)
values (ENCRYPTBYKEY(KEY_GUID('SymKey'), (select col_test from dbo.tbltest)));

select *
from dbo.openSecrets;

close symmetric key [SymKey];

select *
from dbo.openSecrets;

我看到的错误是:SQL Server 子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 时,这是不允许的

问题在于这一行:

 values (ENCRYPTBYKEY(KEY_GUID('SymKey'), (select col_test from dbo.tbltest)));

预期输出:

在此处输入图像描述

这应该是选择语句进出解密的输出。

但我不知道修复内部选择语句。有什么帮助吗?!

标签: sqlsql-serverselectsubquery

解决方案


推荐阅读