教學課程:開始在 Azure SQL Database 中使用具有 Intel SGX 記憶體保護區的 Always Encrypted

適用於:Azure SQL Database

本教學課程會教導您如何開始在 Azure SQL Database 中使用具有安全記憶體保護區的 Always Encrypted。 您將使用 Intel Software Guard Extensions (Intel SGX) 記憶體保護區。 它會顯示:

  • 如何建立環境來測試和評估具有 Intel SGX 記憶體保護區的 Always Encrypted。
  • 如何就地加密資料,以及使用 SQL Server Management Studio (SSMS) 針對加密資料行發出豐富的機密查詢。

必要條件

PowerShell 需求

注意

本節所列的必要條件僅於您在本教學課程中的某些步驟選擇使用 PowerShell 時才適用。 如果您計劃改用 Azure 入口網站,可以略過本節。

需要 Az PowerShell 模組 9.3.0 版或更新版本。 如需如何安裝 Az PowerShell 模組的詳細資料,請參閱安裝 Azure Az PowerShell 模組。 若要判斷電腦上安裝的 Az PowerShell 模組版本,請從 PowerShell 執行下列命令。

Get-InstalledModule -Name Az

步驟 1:建立和設定伺服器和 DC 系列資料庫

在此步驟中,您將需要使用 DC 系列硬體建立新的 Azure SQL Database 邏輯伺服器與新的資料庫,以供具有安全記憶體保護區的 Always Encrypted 使用。 如需詳細資訊,請參閱 DC 系列

  1. 瀏覽至 [選取 SQL 部署選項] 頁面。

  2. 如果您尚未登入 Azure 入口網站,請在出現提示時登入。

  3. SQL 資料庫下,將資源類型設定為單一資料庫,然後選取 [建立]。

    Screenshot of Azure portal, showing the Add to Azure SQL deployment option.

  4. 建立 SQL 資料庫表單的基本資料索引標籤上,在專案詳細資料下,選取想要的 Azure 訂用帳戶

  5. 針對 [資源群組],選取 [新建],輸入您的資源群組名稱,然後選取 [確定]。

  6. 針對 [資料庫名稱],輸入 ContosoHR

  7. 伺服器中,選取 [建立新的],並以下列值填寫新伺服器表單:

    • 伺服器名稱:輸入 mysqlserver 並新增一些字元來表示唯一性。 由於伺服器名稱必須是 Azure 中所有伺服器的全域唯一名稱,而不只是訂用帳戶中的唯一名稱,因此我們無法提供要使用的確切伺服器名稱。 因此,請輸入類似 mysqlserver135 的值,入口網站會讓您知道您輸入的值是否可以使用。
    • 位置:從下拉式清單中選取位置。

      重要

      您必須選取同時支援 DC 系列硬體與 Microsoft Azure 證明的位置 (Azure 區域)。 如需支援 DC 系列的區域清單,請參閱 DC 系列的可用性這裡是 Microsoft Azure 證明的區域可用性。

    • 驗證方法 - 選取 [使用 SQL 驗證]
    • 伺服器管理員登入:輸入管理員登入名稱,例如:azureuser
    • 密碼:輸入符合需求的密碼,然後在 [確認密碼] 欄位中再次輸入。
    • 選取 [確定]。
  8. 您要使用 SQL 彈性集區設為

  9. 在 [計算 + 儲存體] 下,選取 [設定資料庫],然後選取 [變更設定]。

    Screenshot of Azure portal hardware configuration, and where to configure database.

  10. 選取 [DC 系列] 硬體設定,然後選取 [確定]。

    Screenshot of Azure portal, showing Configure DC-series database.

  11. 選取 [套用]。

  12. 回到 [基本] 索引標籤,驗證 [計算 + 儲存體] 設定為 [一般用途]、[DC、2 個虛擬核心、32 GB 儲存體]。

  13. 針對 [備份儲存體備援] 選取 [本地備援備份儲存體]。

  14. 完成時,選取 [下一步:網路功能],為於頁面底部。

    Screenshot of Azure portal, showing Configure DC-series database - basics.

  15. 網路功能索引標籤的連線方法中,選取 [公用端點]。

  16. 針對 [防火牆規則],將 [新增目前的用戶端 IP 位址] 設定為 [是]。 將 [允許 Azure 服務和資源存取此伺服器] 設定為 [否]。

  17. 針對 [連線原則],請保留 [連線原則] 為預設值 - 針對來自 Azure 內部的所有用戶端連線使用重新導向原則,針對來自 Azure 外部的所有用戶端連線使用 Proxy

  18. 針對 [加密連線],將 [最低 TLS 版本] 保留為 [TLS 1.2]。

  19. 選取頁面底部的 [檢閱 + 建立] 。

    Screenshot of the Azure portal Create SQL Database, networking tab.

  20. 檢閱 [檢閱 + 建立] 頁面之後,選取 [建立]。

步驟 2:設定證明提供者

在此步驟中,您將在 Microsoft Azure 證明中建立並設定證明提供者。 這是證明您資料庫所使用的安全記憶體保護區所需。

  1. 瀏覽至 [建立證明提供者] 頁面。

  2. 在 [建立證明提供者] 頁面上,提供下列輸入:

    • 訂用帳戶:選擇您在其中建立 Azure SQL 邏輯伺服器的相同訂用帳戶。
    • 資源群組:選擇您在其中建立 Azure SQL 邏輯伺服器的相同資源群組。
    • 名稱:輸入 myattestprovider,並新增一些字元以獲得獨特性。 因為名稱必須是全域唯一的,所以我們無法提供要使用的確切證明提供者名稱。 因此,請輸入類似 myattestprovider12345 的值,入口網站會讓您知道您輸入的值是否可以使用。
    • 位置:選擇與 Azure SQL 邏輯伺服器相同的位置。
    • 原則簽署者憑證檔案:將此欄位保留空白,因為您將設定未簽署的原則。
  3. 提供必要的輸入之後,選取 [檢閱 + 建立]。

    Screenshot of the Azure portal Create attestation provider menu.

  4. 選取 [建立]。

  5. 一旦建立證明提供者,請選取 [移至資源]。

  6. 在證明提供者的 [概觀] 索引標籤上,將證明 URI 屬性的值複製到剪貼簿,並將其儲存在檔案中。 這是證明 URL,您將在稍後的步驟中使用。

    Screenshot of the attestation URL in the Azure portal.

  7. 在視窗左側或下方窗格中,選取 [資源] 功能表上的 [原則]。

  8. 將 [證明類型] 設定為 SGX-IntelSDK

  9. 選取上方功能表上的 [設定]。

    Screenshot of configuring attestation policy in the Azure portal.

  10. 將 [原則格式] 設定為 [文字]。 讓 [原則選項] 設定為 [輸入原則]。

  11. 在 [原則文字] 欄位中,以下列原則取代預設原則。 如需下列原則的詳細資訊,請參閱建立和設定證明提供者

version= 1.0;
authorizationrules 
{
       [ type=="x-ms-sgx-is-debuggable", value==false ]
        && [ type=="x-ms-sgx-product-id", value==4639 ]
        && [ type=="x-ms-sgx-svn", value>= 2 ]
        && [ type=="x-ms-sgx-mrsigner", value=="e31c9e505f37a58de09335075fc8591254313eb20bb1a27e5443cc450b6e33e5"] 
    => permit();
};

  1. 選取 [儲存]。

    Screenshot of editing an attestation policy in the Azure portal.

  2. 選取上方功能表上的 [重新整理],以檢視設定的原則。

步驟 3:填入您的資料庫

在此步驟中,您將建立一個資料表,並將其填入您稍後將加密和查詢的一些資料。

  1. 開啟 SSMS,並連線到您在資料庫連線中所建立、啟用 Always Encrypted 的 Azure SQL 邏輯伺服器中的 ContosoHR 資料庫。

    1. 在 [連線至伺服器] 對話方塊中,指定伺服器的完整名稱 (例如,myserver135.database.windows.net),然後輸入您在建立伺服器時所指定的系統管理員使用者名稱和密碼。

    2. 選取 [選項]>>,然後選取 [連線屬性] 索引標籤。請務必選取 [ContosoHR] 資料庫 (而非預設的 master 資料庫)。

    3. 選取 [Always Encrypted] 索引標籤。

    4. 請確定選取 [啟用 Always Encrypted (資料行加密)] 核取方塊。

      Screenshot of Connect to Server using SSMS without Always Encrypted enabled.

    5. 選取 [連接]。

  2. 建立名為 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
    
  3. 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:佈建啟用記憶體保護區的金鑰

在此步驟中,您將建立會允許記憶體保護區計算的資料行主要金鑰和資料行加密金鑰。

  1. 使用上個步驟中的 SSMS 執行個體,在物件總管中展開您的資料庫,然後巡覽至 [安全性]>[Always Encrypted 金鑰]。

  2. 佈建已啟用記憶體保護區的新資料行主要金鑰:

    1. 以滑鼠右鍵按一下 [Always Encrypted 金鑰],然後選取 [新增資料行主要金鑰]。
    2. 輸入新資料行主要金鑰的名稱:CMK1
    3. 確認已選取 [允許記憶體保護區計算]。 (如果為資料庫啟用安全記憶體保護區,則預設會選取此項目。此項目應已啟用,因為您的資料庫會使用 DC 系列硬體組態。)
    4. 請選取 [Azure Key Vault] (建議),[Windows 憑證存放區] ([目前使用者] 或 [本機電腦])。
      • 如果您選取 [Azure Key Vault],請登入 Azure,選取包含您要使用的金鑰保存庫 Azure 訂用帳戶,然後選取您的金鑰保存庫。 選取 [產生金鑰] 以建立新的金鑰。
      • 如果您選取 [Windows 憑證存放區],請選取 [產生憑證] 按鈕以建立新的憑證。 Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.
    5. 選取 [確定]。
  3. 建立已啟用記憶體保護區的新資料行加密金鑰:

    1. 以滑鼠右鍵按一下 [Always Encrypted 金鑰],然後選取 [新增資料行加密金鑰]。
    2. 輸入新資料行加密金鑰的名稱:CEK1
    3. 在 [資料行主要金鑰] 下拉式清單中,選取您在先前步驟中建立的資料行主要金鑰。
    4. 選取 [確定]。

步驟 5:就地加密某些資料行

在此步驟中,您會加密儲存在伺服器端記憶體保護區內 SSNSalary 資料行中的資料,然後對資料測試 SELECT 查詢。

  1. 開啟新的 SSMS 執行個體,並連線到資料庫,對資料庫連線啟用 Always Encrypted。

    1. 啟動新的 SSMS 執行個體。

    2. 在 [連線至伺服器] 對話方塊中,指定伺服器的完整名稱 (例如,myserver135.database.windows.net),然後輸入您在建立伺服器時所指定的系統管理員使用者名稱和密碼。

    3. 選取 [選項]>>,然後選取 [連線屬性] 索引標籤。請務必選取 [ContosoHR] 資料庫 (而非預設的 master 資料庫)。

    4. 選取 [Always Encrypted] 索引標籤。

    5. 選取 [啟用 Always Encrypted (資料行加密)] 核取方塊。

    6. 選取 [啟用安全記憶體保護區]。 (此步驟適用於 SSMS 19 或更新版本。)

    7. 將 [通訊協定] 設定為[Microsoft Azure 證明]。 (此步驟適用於 SSMS 19 或更新版本。)

    8. 遵循步驟 2:設定證明提供者中的步驟,指定您所取得的記憶體保護區證明 URL。 請參閱以下的螢幕擷取畫面。

      Screenshot of the SSMS Connect to Server dialog Always Encrypted tab, with attestation enabled.

    9. 選取 [連接]。

    10. 如果系統提示您啟用 Always Encrypted 的參數化查詢,請選取 [啟用]。

  2. 使用相同的 SSMS 執行個體 (啟用 Always Encrypted),開啟新的查詢視窗,並執行下列陳述式以加密 SSNSalary 資料行。

    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 陳述式。 修改資料表之後,您需要清除所有批次之計畫和存取資料表的預存程序,以重新整理參數加密資訊。

  3. 為驗證 SSNSalary 資料行現已加密,請在針對資料庫連接啟用 Always Encrypted 的 SSMS 執行個體中開啟新的查詢視窗,並執行以下陳述式。 查詢視窗應該傳回 SSNSalary 資料行中加密的值。 如果使用已啟用 Always Encrypted 的 SSMS 執行個體執行同一查詢,您應該會看到解密的資料。

    SELECT * FROM [HR].[Employees];
    

步驟 6:針對加密的資料行執行豐富查詢

您可以針對加密的資料行執行豐富查詢。 在伺服器端記憶體保護區內,將會執行一些查詢處理。

  1. 啟用 Always Encrypted 的 SSMS 執行個體中,請確定也已啟用 Always Encrypted 的參數化。

    1. 從 SSMS 的主功能表選取 [工具]。
    2. 選取 [選項]。
    3. 瀏覽至 [查詢執行]>[SQL Server]>[進階]。
    4. 確定已選取 [啟用 Always Encrypted 的參數化]。
    5. 選取 [確定]。
  2. 開啟新的查詢視窗,貼上下列查詢,然後執行。 查詢應該會傳回純文字值和符合指定搜尋準則的資料列。

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. 在未啟用 Always Encrypted 的 SSMS 執行個體中,再次嘗試相同的查詢。 應會發生失敗。

後續步驟

完成本教學課程之後,您可以移至下列其中一個教學課程:

另請參閱