教學課程:開始使用 Always Encrypted

適用于: SQL Server Azure SQL 資料庫Azure SQL 受控執行個體

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

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

必要條件

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

步驟 1:建立和填入資料庫架構

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

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

  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. 以滑鼠右鍵按一下[員工]資料表,然後選取 [加密資料行] 以開啟Always Encrypted精靈。

    開啟Always Encrypted精靈的螢幕擷取畫面。

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

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

    1. 選取 [SSN ] 和 [薪資] 資料 。 選擇 SSN 資料 行的決定性加密,並為 [薪資 ] 資料行選擇隨機加密。 確定性加密支援查詢,例如涉及加密資料行相等比較的點查閱搜尋。 隨機加密不支援加密資料行上的任何計算。
    2. 保留 CEK-Auto1 (新增) 作為這兩個數據行的資料行加密金鑰。 此機碼尚不存在,而且會由精靈產生。
    3. 選取 [下一步]。

    [精靈] 資料行選取Always Encrypted螢幕擷取畫面。

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

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

    一般而言,Azure 金鑰保存庫是建議的選項,特別是當您的資料庫位於 Azure 時。

    • 若要使用 Azure 金鑰保存庫:

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

      使用 Azure 金鑰保存庫 選取Always Encrypted精靈主要金鑰的螢幕擷取畫面。

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

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

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

        使用憑證存放區選取Always Encrypted精靈主要金鑰選取專案的螢幕擷取畫面。

      3. 選取 [下一步]。

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

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

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

    Always Encrypted精靈摘要的螢幕擷取畫面。

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

    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 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. 選取 [連接]。

    停用Always Encrypted的 SSMS 連線選項螢幕擷取畫面。

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

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

    來自加密資料行之 cyphertext 結果的螢幕擷取畫面。

  3. 連線到您的資料庫,並啟用連線Always Encrypted。

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

    已啟用Always Encrypted的 SSMS 連線選項螢幕擷取畫面。

  4. 重新執行相同的查詢。 由於您已針對資料庫連線啟用Always Encrypted連線,因此 SSMS 中的用戶端驅動程式會嘗試解密這兩個加密資料行中儲存的資料。 如果您使用 Azure 金鑰保存庫,系統可能會提示您登入 Azure。

    來自加密資料行之純文字結果的螢幕擷取畫面。

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

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

    在常設查詢視窗中啟用參數化的螢幕擷取畫面。

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

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

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

下一步

另請參閱