教學課程:開始使用 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. 以滑鼠右鍵按一下查詢視窗中的任何位置,然後選取 [連線>變更連線]。 這會開啟 [ 連接到 Database Engine ] 對話方塊。
    3. 選取 [選項 <<]。 這會在 [ 連接到 Database Engine ] 對話方塊中顯示其他索引標籤。
    4. 選取 [Always Encrypted] 索引標籤。
    5. 確定未選取 [啟用Always Encrypted (資料行加密])
    6. 選取 [連線]。

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

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

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

    加密資料行中加密文字結果的螢幕擷取畫面。

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

    1. 以滑鼠右鍵按一下查詢視窗中的任何位置,然後選取 [連線>變更連線]。 這會開啟 [ 連接到 Database Engine ] 對話方塊。
    2. 選取 [選項 <<]。 這會在 [ 連接到 Database Engine ] 對話方塊中顯示其他索引標籤。
    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]
    

下一步

另請參閱