教學課程:開始使用 Always Encrypted

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

本教學課程會教導您如何開始使用 Always Encrypted。 它會顯示:

  • 如何加密資料庫中選取的資料行。
  • 如何查詢加密的資料行。

必要條件

在本教學課程中,您需要:

步驟 1:建立並填入資料庫結構描述

在此步驟中,您將建立 HR 結構描述和 Employees 資料表。 然後,您會將一些資料填入資料表。

  1. 連線到您的資料庫。 如需如何從 SSMS 連接到資料庫的指示,請參閱快速入門:使用 SQL Server Management Studio (SSMS) 連接及查詢 Azure SQL Database 或 Azure SQL 受控執行個體快速入門:使用 SQL Server Management Studio (SSMS) 連接及查詢 SQL 執行個體

  2. 開啟 ContosoHR 資料庫的新查詢視窗。

  3. 貼上並執行下列陳述式,以建立名為 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];
    
  4. 貼上並執行下列陳述式,將一些員工記錄新增至 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
    );
    

步驟 2:加密資料行

在此步驟中,您將佈建資料行主要金鑰和資料行加密金鑰,以進行 Always Encrypted。 然後,您將加密 Employees 資料表中的 SSNSalary 資料行。

SSMS 提供一個精靈,其可透過設定資料行主要金鑰、資料行加密金鑰及加密選取的資料行,來協助您輕鬆設定 Always Encrypted (「一律加密」)。

  1. [物件總管] 中,展開 [資料庫>ContosoHR>資料表]

  2. Employees 資料表上按一下滑鼠右鍵,然後選取 [加密資料行] 以開啟 [Always Encrypted 精靈]。

    Screenshot of opening the Always Encrypted Wizard.

  3. 在精靈的 [簡介] 頁面上,選取 [下一步]

  4. [資料行選取] 頁面上。

    1. 選取 SSNSalary 資料行。 針對 SSN 資料行選擇確定性加密,以及針對 Salary 資料行選擇隨機化加密。 確定性加密支援查詢,例如涉及在加密資料行上執行相等比較的點查閱搜尋。 隨機化加密不支援在加密資料行上執行任何計算。
    2. 針對兩個資料行保留 CEK-Auto1 (新增) 作為資料行加密金鑰。 此金鑰尚未存在,將由精靈產生。
    3. 選取 [下一步]。

    Screenshot of the Always Encrypted Wizard column selection.

  5. [主要金鑰組態] 頁面上,設定精靈將產生的新資料行主要金鑰。 首先,您必須選取要儲存資料行主要金鑰的位置。 精靈支援兩種金鑰存放區類型:

    • Azure Key Vault - 如果您的資料庫位於 Azure 中,建議使用
    • Windows 的憑證存放區

    一般而言,Azure Key Vault 是建議的選項,特別是在您的資料庫位於 Azure 時。

    • 若要使用 Azure Key Vault:

      1. 選取 [Azure 金鑰保存庫]
      2. 選取 [登入],然後完成登入 Azure。
      3. 登入之後,頁面會顯示您可以存取的訂用帳戶和金鑰保存庫的清單。 選取包含您想要使用的金鑰保存庫的 Azure 訂用帳戶。
      4. 選取您的金鑰保存庫。
      5. 選取 [下一步]。

      Screenshot of the Always Encrypted Wizard master key selection using Azure Key Vault.

    • 若要使用 Windows 憑證存放區:

      1. 選取 [Windows 憑證存放區]

      2. 保留 [目前使用者] 的預設選項 - 這會指示精靈在目前使用者的存放區中產生憑證 (您的新資料行主要金鑰)。

        Screenshot of the Always Encrypted Wizard master key selection using the certificate store.

      3. 選取 [下一步]。

  6. 在 [就地加密設定] 頁面上,不需要其他設定,因為資料庫未啟用記憶體保護區。 選取 [下一步]。

  7. 在 [執行設定] 頁面上,系統會詢問您要繼續進行加密,還是要產生稍後要執行的 PowerShell 指令碼。 保留預設的設定,然後選取 [下一步]

  8. [摘要] 頁面上,精靈會告知您它將執行的動作。 檢查所有資訊是否都正確,然後選取 [完成]

  9. [結果] 頁面上,您可以監視精靈作業的進度。 等到所有作業都順利完成,然後選取 [關閉]

    Screenshot of the Always Encrypted Wizard summary.

  10. (選擇性) 探索精靈在您的資料庫中所做的變更。

    1. 展開 [ContosoHR>安全性>Always Encrypted 金鑰],以探索資料行主要金鑰的中繼資料物件,以及精靈所建立的資料行加密。

    2. 您也可以針對包含金鑰中繼資料的系統目錄檢視來執行下列的查詢。

      SELECT * FROM sys.column_master_keys;
      SELECT * FROM sys.column_encryption_keys
      SELECT * FROM sys.column_encryption_key_values
      
    3. [物件總管] 中,以滑鼠右鍵按一下 Employees 資料表,然後選取 [編寫資料表的指令碼為>CREATE 至>新增查詢編輯器視窗]。 這將開啟一個新的查詢視窗,其中包含 Employees 資料表的 CREATE TABLE 陳述式。 請注意,出現在 SSNSalary 資料行定義中的 ENCRYPTED WITH 子句。

    4. 您也可以針對 sys.columns 執行下列的查詢,以擷取這兩個加密資料行的資料行層級加密中繼資料。

      SELECT
      [name]
      , [encryption_type]
      , [encryption_type_desc]
      , [encryption_algorithm_name]
      , [column_encryption_key_id]
      FROM sys.columns
      WHERE [encryption_type] IS NOT NULL;
      

步驟 3:查詢加密的資料行

  1. 針對您的連線停用 Always Encrypted 功能來連接到您的資料庫。

    1. 開啟新的查詢視窗。
    2. 在查詢視窗的任何位置上按一下滑鼠右鍵,然後選取 [連線>變更連線]。 這會開啟 [連接到資料庫引擎] 對話方塊。
    3. 選取 [選項 <<]。 這會在 [連接到資料庫引擎] 對話方塊中顯示其他索引標籤。
    4. 選取 [Always Encrypted] 索引標籤。
    5. 請確定未選取 [啟用 Always Encrypted (資料行加密)]
    6. 選取 [連線]。

    Screenshot of the SSMS connection option for Always Encrypted disabled.

  2. 貼上並執行下列查詢。 該查詢應該會傳回二進位加密的資料。

    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

    Screenshot of cipher text results from encrypted columns.

  3. 針對您的連線啟用 Always Encrypted 功能來連接到您的資料庫。

    1. 在查詢視窗的任何位置上按一下滑鼠右鍵,然後選取 [連線>變更連線]。 這會開啟 [連接到資料庫引擎] 對話方塊。
    2. 選取 [選項 <<]。 這會在 [連接到資料庫引擎] 對話方塊中顯示其他索引標籤。
    3. 選取 [Always Encrypted] 索引標籤。
    4. 選取 [啟用 Always Encrypted (資料行加密])
    5. 選取 [連線]。

    Screenshot of the SSMS connection option for Always Encrypted enabled.

  4. 重新執行同一個查詢。 因為您已針對您的資料庫連線啟用了 Always Encrypted 功能而連上線,所以 SSMS 中的用戶端驅動程式會嘗試將這兩個加密資料行中儲存的資料解密。 如果您使用 Azure Key Vault,系統可能會提示您登入 Azure。

    Screenshot of plaintext results from encrypted columns.

  5. 啟用 [Always Encrypted 的參數化] 功能。 此功能可讓您執行依加密資料行篩選資料的查詢 (或將資料插入加密的資料行)。

    1. 從 SSMS 的主功能表中,選取 [查詢]
    2. 選取 [查詢選項]。
    3. 瀏覽至 [執行]>[進階]。
    4. 確定已核取 [啟用 Always Encrypted 的參數化]
    5. 選取 [確定]。

    Screenshot enabling parameterization in an existing query window.

  6. 貼上並執行下列查詢,此查詢會依加密的 SSN 資料行篩選資料。 此查詢應該會傳回一個包含純文字值的資料列。

    DECLARE @SSN [char](11) = '795-73-9838'
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    WHERE [SSN] = @SSN
    
  7. 或者,如果您使用以存取原則權限模型設定的 Azure Key Vault,請遵循下列的步驟,以查看當使用者嘗試從加密資料行中擷取純文字資料時會發生什麼事 (在無法存取保護資料的資料行主要金鑰的情況下)。

    1. 在您的金鑰保存庫的存取原則中,自行移除金鑰 unwrap 權限。 如需詳細資訊,請參閱指派 Key Vault 存取原則
    2. 因為 SSMS 中的用戶端驅動程式會快取從金鑰保存庫中取得的資料行加密金鑰長達 2 小時,所以請關閉 SSMS,然後再次開啟它。 這可確保金鑰快取是空的。
    3. 針對您的連線啟用 Always Encrypted 功能來連接到您的資料庫。
    4. 貼上並執行下列查詢。 此查詢應該會失敗並出現錯誤訊息,指出您缺少必要的 unwrap 權限。
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

下一步

另請參閱