Sql-Server

SQL Server Always Encrypted - 創建包含加密列的外部表

  • March 28, 2019

我正在嘗試在伺服器 S2 上創建一個外部表 MyTable,該表引用來自伺服器 S1 的表 MyTable。MyTable 表包含使用 Always Encrypted 加密的列。從 S2 查詢 MyTable 時,我希望該列不加密。是不是可以完成的事情?我在文件中沒有找到任何關於它的資訊(如果有人知道在哪裡可以找到它,我很樂意閱讀文件)……我已經嘗試了下面的幼稚方法,但顯然它不起作用。

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)

有人知道該怎麼做嗎?作為一個額外的問題,有人可以向我解釋 CREATE MASTER KEY ENCRYPTION BY PASSWORD 的用途(它與第一個問題有什麼關係)嗎?

謝謝你的幫助!

第一的:

在創建數據庫範圍的憑證之前,數據庫必須有一個主密鑰來保護憑證。有關詳細資訊,請參閱創建主密鑰 (Transact-SQL)。

創建數據庫範圍的憑據

所以數據庫主密鑰用於加密憑證。

第二:

我想要

$$ AlwaysEncrypted $$從Elastic Database Query查詢 MyTable 時要解密的列。

這是不可能的。AlwaysEncrypted 旨在僅在客戶端上解密數據。即使在 SQL Server客戶端的情況下,也無法將加密密鑰儲存在 SQL Server 中並在數據庫引擎中使用它。沒有根本原因無法實施。但是 AlwaysEncrypted 的主要案例是以 SQL Server(及其管理員)無法訪問這些數據的方式儲存數據。

引用自:https://dba.stackexchange.com/questions/233356