gpt4 book ai didi

sql-server - 不支持使用 CommandBehavior=SequentialAccess 检索加密列 'xxx'

转载 作者:行者123 更新时间:2023-12-03 03:43:42 25 4
gpt4 key购买 nike

我已设置 Azure SQL 数据库并启用始终加密。

其中一列 (column3) 是 varchar(Max)

当我从 SSMS 查询数据库而不使用“列加密设置=启用”时,我可以看到所有列都有二进制数据。

当我使用“列加密设置=启用”从 SSMS 查询数据库时,出现如下错误:

An error occurred while executing batch. Error message is: Retrieving encrypted column 'column3' with CommandBehavior=SequentialAccess is not supported.

这就是我的表定义:

CREATE TABLE [dbo].[mytable](
[column1] [varchar](2000) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
[column2] [datetime] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
[column3] [varchar](max) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL
)

如果我删除第 3 列上的加密,一切正常,我可以看到解密的值。

我在这里遗漏了什么吗?

enter image description here

最佳答案

来自此处 Always Encrypted 团队的开发人员。

SQL Server 和 Azure SQL DB 不允许从 SSMS 查询具有“列加密设置=启用”的 VARCHAR(MAX) 列,因为 SSMS 采用顺序访问来流式传输可能较大的 varchar(MAX) 值。 SSMS 在设计上强制执行此选择,因为它提供了一种查询大对象中部分字节位置的机制(从而避免在内存中存储整个大 blob)。但是,相比之下,Always Encrypted 不允许对加密列进行部分解密。此限制源于这样一个事实:我们使用分组密码并将 HMAC 存储在加密的单元中,如果没有完整的单元值,我们无法验证 HMAC 并解密数据。

作为替代方案,您可以从 ADO.Net 客户端查询具有“列加密设置=启用”的 varchar(max)(不使用 SequentialAccess)。

关于sql-server - 不支持使用 CommandBehavior=SequentialAccess 检索加密列 'xxx',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34348468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com