内存优化表 加密和身份列



我想知道是否可以始终加密Memory Optimized Table并将其主要钥匙自动播种?例如,我想创建以下内容:

CREATE TABLE Foo
(
    [Id] [int] Identity(1,1) NOT NULL,
    [Bar] NVARCHAR(MAX) NOT NULL,
    CONSTRAINT [PK_Foo] PRIMARY KEY NONCLUSTERED ([Id] ASC)
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY)
GO

相当简单的表,最初是可以很好地创建的,但是,当我尝试加密Bar列时,我会得到以下异常。

2017年4月21日09:23:00 [错误] workitemexecution:消息:内部 异常:system.data.sqlclient.sqlexception详细信息:无法插入 表" foo"中的身份列的显式值 设置为关闭..

我还尝试在创建表语句之后设置SET IDENTITY_INSERT Foo ON,但仍然没有运气。

阅读文档似乎不可能表明这是不可能的,但也许我错过了什么?如果这不可能,我知道另一种我知道会起作用的方法。

我猜我的摘要中的问题是.. "做内存优化的表支持总是用身份列加密的"

您无法使用始终加密的身份列加密,无论它们是否存储在内存优化的表中或常规表中。在正常的始终加密查询处理流中,在客户端创建并加密插入加密列中的值。请注意,只有客户端具有加密密钥,并且可以加密/解密数据。SQL Server通过设计,无法访问加密密钥,并且无法执行加密操作。身份列值是在服务器端生成的,因此它们不符合上述工作流程。

了解您为什么要加密身份列是有用的。始终加密的设计用于保护敏感数据。自动生成的标识符通常不被视为敏感信息。

谢谢,

jakub

即使通过向导进行加密后,您也应该为您创建一个CMK和CEK。您可以通过浏览您的DB-> security->始终加密键 -> SSMS Object Explorer中的列加密密钥来检查创建的CEK的名称。就我而言,Cek的名称是Cek_auto1

如果您发现上面的位置中没有列加密键,则可以按照PREVINISINing列主键(新列主键((新列主键(和配置列加密密钥(新列加密键(来创建新的键。在本文中

您应该能够如下创建表格

CREATE TABLE Foo
(
    [Id] [int] Identity(1,1) NOT NULL,
    [Bar] NVARCHAR(MAX) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
    CONSTRAINT [PK_Foo] PRIMARY KEY NONCLUSTERED ([Id] ASC)
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY)
GO

最新更新