我正在尝试确定是否可以在临时表中的列上使用 Always Encrypted(Windows 2016 上的 SQL Server 2016 SP1 Enterprise)。我试过如下:
CREATE TABLE #listofdates (compare_dt datetime2(7) encrypted with (
COLUMN_ENCRYPTION_KEY = [ColEnc1]
, ENCRYPTION_TYPE = Deterministic
, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
) NOT NULL
)
但是,我收到错误:
消息 33293,级别 16,状态 8,第 3 行
找不到列加密密钥“ColEnc1”,因为它不存在或您没有权限。
我认为这个错误具有误导性,因为如果我只是将表名替换#listofdates
为没有前导 # 的另一个名称(因此从临时表切换到普通表),则该语句有效。
MS 网站上列出 Always Encrypted 限制/限制的部分没有提到临时表。
看来您必须在 tempdb中创建CMK和CEK 。
此命令在 My Machine® 上运行,主要是从 BOL 文章中复制/粘贴的。
我猜 CEK [ColEnc1] 驻留在表 listofdates 所在的同一数据库中。尝试在 tempdb 表中创建 CMK 和 CEK,错误应该消失了。