我试图在服务器S2上创建一个外部表S2,它从服务器S1引用表MyTable。表MyTable包含使用“始终加密”加密的列。我希望该列在从MyTable查询S2时未加密。这是可以完成的事情吗?我在文档中没有找到任何关于它的东西(如果有人知道在哪里找到它,我很乐意读一下文档).我尝试过这种天真的方法,但显然行不通。
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'myEncryptionPassword';
CREATE DATABASE SCOPED CREDENTIAL MyCred
WITH IDENTITY = 'myAdminAccount',
SECRET = 'mySuperStrongPassword';
CREATE EXTERNAL DATA SOURCE RemoteServerRef
WITH
(
TYPE=RDBMS,
LOCATION='somewhere.on.the.inter.net',
DATABASE_NAME='myDatabase',
CREDENTIAL= MyCred
);
CREATE EXTERNAL TABLE [dbo].[MyTable]
(
[Id] [uniqueidentifier] NOT NULL,
[Field2] [int] NOT NULL,
[Field3] [datetime] NOT NULL,
[Field4] [decimal](18, 2) NULL,
[EncryptedField1] [nvarchar](128) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
[EncryptedField2] [int] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
)
WITH
(DATA_SOURCE = RemoteServerRef)有人知道怎么做吗?作为一个额外的问题,有人能向我解释一下密码创建主密钥加密的用途(这与第一个问题有什么关系吗?)
谢谢你的帮忙!
发布于 2019-03-28 14:48:49
第一:
在创建数据库作用域凭据之前,数据库必须具有保护凭据的主密钥。有关更多信息,请参见创建主键(Transact-SQL)。
因此,数据库主密钥用于加密凭据。
第二:
我希望AlwaysEncrypted列在从弹性数据库查询查询MyTable时未加密。
这是不可能的AlwaysEncrypted只打算在客户端上对数据进行解密。即使在Server是客户端的情况下,也无法将加密密钥存储在Server中并在数据库引擎中使用。没有根本的理由不能实现这一点。但是,AlwaysEncrypted的主要用例是以Server (及其管理员)无法访问这些数据的方式存储数据。
https://dba.stackexchange.com/questions/233356
复制相似问题