教學課程:開始在 Azure SQL 資料庫中使用具有 VBS 記憶體保護區的 Always Encrypted
適用於:Azure SQL 資料庫
本教學課程會教導您如何在 Azure SQL Database 中以 虛擬化型安全性 (VBS) 記憶體保護區,開始使用具有安全記憶體保護區的 Always Encrypted。 它會顯示:
- 如何建立環境來測試和評估具有 VBS 記憶體保護區的 Always Encrypted。
- 如何就地加密資料,以及使用 SQL Server Management Studio (SSMS) 針對加密資料行發出豐富的機密查詢。
必要條件
- 有效的 Azure 訂用帳戶。 如果您沒有訂用帳戶,請建立免費帳戶。 您必須是訂用帳戶的參與者角色或擁有者角色的成員,才能建立資源。
- 不強制,但建議用來儲存 Always Encrypted 的資料行主要金鑰:Azure Key Vault 中的金鑰保存庫。 如需建立金鑰保存庫的資訊,請參閱快速入門:使用 Azure 入口網站建立金鑰保存庫。
- 如果您的金鑰保存庫使用存取原則權限模型,請確定您在金鑰保存庫中具有下列金鑰權限:
get
、list
、create
、unwrap key
、wrap key
、verify
、sign
。 請參閱指派金鑰保存庫存取原則。 - 如果您正在使用 Azure 角色型存取控制 (RBAC) 權限模型,請確定您是金鑰保存庫之 Key Vault 密碼編譯長角色的成員。 請參閱使用 Azure 角色型存取控制來提供 Key Vault 金鑰、憑證和秘密的存取權。
- 如果您的金鑰保存庫使用存取原則權限模型,請確定您在金鑰保存庫中具有下列金鑰權限:
工具需求
本教學課程需要 SQL Server Management Studio (SSMS)。 您可以選擇使用 PowerShell 或 Azure CLI 來啟用 VBS 記憶體保護區。
步驟 1:建立並設定伺服器和資料庫
在此步驟中,您將建立新的 Azure SQL 資料庫邏輯伺服器和新的資料庫。
前往快速入門:建立單一資料庫 - Azure SQL 資料庫,並遵循「建立單一資料庫」一節中的指示,建立新的 Azure SQL 資料庫邏輯伺服器和新資料庫。
重要
請務必建立名為 ContosoHR 的空白資料庫 (而不是範例資料庫)。
步驟 2:啟用 VBS 記憶體保護區
在此步驟中,您會在資料庫中啟用 VBS 記憶體保護區,這對具有安全記憶體保護區的 Always Encrypted 是必要項目。 若要在資料庫中啟用 VBS 記憶體保護區,您需要將 preferredEnclaveType 資料庫屬性 設定為 VBS。
開啟 Azure 入口網站,並找到您要為其啟用安全記憶體保護區的資料庫。
在 [安全性] 設定中,選取 [資料加密]。
在 [資料加密] 功能表中,選取 [Always Encrypted] 索引標籤。
將 [啟用安全記憶體保護區] 設定為 [開啟]。 如果其已設定為 [開啟],請繼續完成下一個步驟。
選取 [儲存] 以儲存您的 Always Encrypted 設定。
步驟 3:填入您的資料庫
在此步驟中,您將建立一個資料表,並將其填入您稍後將加密和查詢的一些資料。
開啟 SSMS,並連線到您在資料庫連線中所建立、未啟用 Always Encrypted 的 Azure SQL 邏輯伺服器中的 ContosoHR 資料庫。
在 [連線至伺服器] 對話方塊中,指定伺服器的完整名稱 (例如,myserver135.database.windows.net),然後輸入您在建立伺服器時所指定的管理員使用者名稱和密碼。
選取 [選項]>>,然後選取 [連線屬性] 索引標籤。請務必選取 [ContosoHR] 資料庫 (而非預設的
master
資料庫)。選取 [Always Encrypted] 索引標籤。
請確定未選取 [啟用 Always Encrypted (資料行加密)] 核取方塊。
選取 [連線]。
建立名為 Employees 的新資料表。
CREATE SCHEMA [HR]; GO CREATE TABLE [HR].[Employees] ( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [SSN] [char](11) NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [Salary] [money] NOT NULL ) ON [PRIMARY]; GO
在 Employees 資料表中新增一些員工記錄。
INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('795-73-9838' , N'Catherine' , N'Abel' , $31692); INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('990-00-6818' , N'Kim' , N'Abercrombie' , $55415);
步驟 4:佈建啟用記憶體保護區的金鑰
在此步驟中,您將建立會允許記憶體保護區計算的資料行主要金鑰和資料行加密金鑰。
使用上個步驟中的 SSMS 執行個體,在物件總管中展開您的資料庫,然後巡覽至 [安全性]>[Always Encrypted 金鑰]。
佈建已啟用記憶體保護區的新資料行主要金鑰:
- 以滑鼠右鍵按一下 [Always Encrypted 金鑰],然後選取 [新增資料行主要金鑰]。
- 輸入新資料行主要金鑰的名稱:CMK1。
- 確認已選取 [允許記憶體保護區計算]。 (如果為資料庫啟用了安全記憶體保護區,則預設會選取此項目。此項目應已啟用,因為您的資料庫會使用 DC 系列硬體設定。)
- 請選取 [Azure Key Vault] (建議),[Windows 憑證存放區] ([目前使用者] 或 [本機電腦])。
- 如果您選取 [Azure Key Vault],請登入 Azure,選取包含您要使用的金鑰保存庫 Azure 訂用帳戶,然後選取您的金鑰保存庫。 選取 [產生金鑰] 以建立新的金鑰。
- 如果您選取 [Windows 憑證存放區],請選取 [產生憑證] 按鈕以建立新的憑證。
- 選取 [確定]。
建立已啟用記憶體保護區的新資料行加密金鑰:
- 以滑鼠右鍵按一下 [Always Encrypted 金鑰],然後選取 [新增資料行加密金鑰]。
- 輸入新資料行加密金鑰的名稱:CEK1。
- 在 [資料行主要金鑰] 下拉式清單中,選取您在先前步驟中建立的資料行主要金鑰。
- 選取 [確定]。
步驟 5:就地加密某些資料行
在此步驟中,您會加密儲存在伺服器端記憶體保護區內 SSN 和 Salary 資料行中的資料,然後對資料測試 SELECT 查詢。
開啟新的 SSMS 執行個體,並連線到資料庫,對資料庫連線啟用 Always Encrypted。
啟動新的 SSMS 執行個體。
在 [連線至伺服器] 對話方塊中,指定伺服器的完整名稱 (例如,myserver135.database.windows.net),然後輸入您在建立伺服器時所指定的系統管理員使用者名稱和密碼。
選取 [選項]>>,然後選取 [連線屬性] 索引標籤。請務必選取 [ContosoHR] 資料庫 (而非預設的
master
資料庫)。選取 [Always Encrypted] 索引標籤。
選取 [啟用 Always Encrypted (資料行加密)] 核取方塊。
選取 [啟用安全記憶體保護區]。
將 [通訊協定] 設為 [無]。 請參閱以下的螢幕擷取畫面。
選取 [連接]。
如果系統提示您啟用 Always Encrypted 的參數化查詢,請選取 [啟用]。
使用相同的 SSMS 執行個體 (啟用 Always Encrypted),開啟新的查詢視窗,並執行下列陳述式以加密 SSN 和 Salary 資料行。
ALTER TABLE [HR].[Employees] ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER TABLE [HR].[Employees] ALTER COLUMN [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
注意
在上述指令碼中, ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE 陳述式會用來清除資料庫查詢計畫快取。 修改資料表之後,您需要清除所有批次之計畫和存取資料表的預存程序,以重新整理參數加密資訊。
為驗證 SSN 和 Salary 資料行現已加密,請在未針對資料庫連接啟用 Always Encrypted 的 SSMS 執行個體中開啟新的查詢視窗,並執行以下陳述式。 查詢視窗應該傳回 SSN 和 Salary 資料行中加密的值。 如果使用已啟用 Always Encrypted 的 SSMS 執行個體執行同一查詢,您應該會看到解密的資料。
SELECT * FROM [HR].[Employees];
步驟 6:針對加密的資料行執行豐富查詢
您可以針對加密的資料行執行豐富查詢。 在伺服器端記憶體保護區內,將會執行一些查詢處理。
在已啟用 Always Encrypted 的 SSMS 執行個體中,請確定也已啟用 Always Encrypted 的參數化。
- 從 SSMS 的主功能表選取 [工具]。
- 選取 [選項]。
- 瀏覽至 [查詢執行]>[SQL Server]>[進階]。
- 確定已選取 [啟用 Always Encrypted 的參數化]。
- 選取 [確定]。
開啟新的查詢視窗,貼上下列查詢,然後執行。 查詢應該會傳回純文字值和符合指定搜尋準則的資料列。
DECLARE @SSNPattern [char](11) = '%6818'; DECLARE @MinSalary [money] = $1000; SELECT * FROM [HR].[Employees] WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
在未啟用 Always Encrypted 的 SSMS 執行個體中,再次嘗試相同的查詢。 應會發生失敗。
後續步驟
完成本教學課程之後,您可以移至下列其中一個教學課程:
- 教學課程:使用具有安全記憶體保護區的 Always Encrypted 開發 .NET 應用程式
- 教學課程:使用具有安全記憶體保護區的 Always Encrypted 開發 .NET Framework 應用程式
- 教學課程:使用隨機化加密在已啟用記憶體保護區的資料行上建立及使用索引