教學課程:開始使用 Always Encrypted
適用于: SQL Server Azure SQL資料庫
Azure SQL 受控執行個體
本教學課程將教導您如何開始使用Always Encrypted。 它會顯示:
- 如何加密資料庫中選取的資料行。
- 如何查詢加密的資料行。
注意
如果您要尋找具有安全記憶體保護區的Always Encrypted資訊,請改為參閱下列教學課程:
必要條件
在本教學課程中,您需要:
- Azure SQL Database、Azure SQL 受控執行個體 或 SQL Server 中的空白資料庫。 下列指示假設資料庫名稱為 ContosoHR。 您必須是資料庫的擁有者, (db_owner 角色的成員) 。 如需如何建立資料庫的資訊,請參閱快速入門:建立單一資料庫 - Azure SQL Database或SQL Server 中建立資料庫。
- 選擇性,但建議使用,特別是如果您的資料庫位於 Azure 中:Azure 中的金鑰保存庫金鑰保存庫。 如需如何建立金鑰保存庫的資訊,請參閱快速入門:使用 Azure 入口網站 建立金鑰保存庫。
- 如果您的金鑰保存庫使用存取原則許可權模型,請確定您在金鑰保存庫中具有下列金鑰許可權:
get
、、list
、unwrap key
create
、wrap key
、、、verify
sign
。 請參閱指派金鑰保存庫存取原則。 - 如果您使用 Azure 角色型存取控制 (RBAC) 許可權模型,請確定您是金鑰保存庫金鑰保存庫密碼編譯長角色的成員。 請參閱使用 Azure 角色型存取控制來提供金鑰保存庫金鑰、憑證和秘密的存取權。
- 如果您的金鑰保存庫使用存取原則許可權模型,請確定您在金鑰保存庫中具有下列金鑰許可權:
- 最新版SQL Server Management Studio (SSMS) 或最新版的SqlServer和Az PowerShell 模組。 只有在您使用 Azure 金鑰保存庫時,才需要 Az PowerShell 模組。
步驟 1:建立和填入資料庫架構
在此步驟中,您將建立 HR 架構和 Employees 資料表。 然後,您會將一些資料填入資料表。
連線到您的資料庫。 如需如何從 SSMS 連線到資料庫的指示,請參閱快速入門:使用 SQL Server Management Studio (SSMS) 或快速入門連線和查詢Azure SQL資料庫或Azure SQL 受控執行個體:使用 連線和查詢SQL Server實例SQL Server Management Studio (SSMS) 。
開啟 ContosoHR 資料庫的新查詢視窗。
貼上並執行下列語句,以建立名為 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];
貼上並執行下列語句,將一些員工記錄新增至 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資料表中的SSN和Salary資料行。
SSMS 提供精靈,可藉由設定資料行主要金鑰、資料行加密金鑰和加密選取的資料行,協助您輕鬆設定Always Encrypted。
在物件總管中,展開 [資料庫>] [ContosoHR>資料表]。
以滑鼠右鍵按一下[員工]資料表,然後選取 [加密資料行] 以開啟Always Encrypted精靈。
在精靈的 [簡介] 頁面上選取 [下一步]。
在 [ 資料行選取] 頁面上。
- 選取 [SSN ] 和 [ 薪資] 資料行。 選擇 SSN 資料行的決定性加密,並為 [薪資 ] 資料行選擇隨機加密。 決定性加密支援查詢,例如涉及加密資料行相等比較的點查閱搜尋。 隨機加密不支援加密資料行上的任何計算。
- 將 CEK-Auto1 保留 (新增) 作為這兩個數據行的資料行加密金鑰。 此機碼尚未存在,而且將由精靈產生。
- 選取 [下一步]。
在 [ 主要金鑰組態 ] 頁面上,設定精靈將產生的新資料行主要金鑰。 首先,您必須選取要儲存資料行主要金鑰的位置。 精靈支援兩種金鑰存放區類型:
- Azure 金鑰保存庫 - 如果您的資料庫位於 Azure 中,建議使用
- Windows 憑證存放區
一般而言,Azure 金鑰保存庫是建議的選項,特別是在您的資料庫位於 Azure 時。
若要使用 Azure 金鑰保存庫:
- 選取 [Azure 金鑰保存庫] 。
- 選取 [登入 ],然後完成登入 Azure。
- 登入之後,頁面會顯示訂用帳戶和金鑰保存庫的清單,您可以存取。 選取包含金鑰保存庫的 Azure 訂用帳戶,您想要使用。
- 選取您的金鑰保存庫。
- 選取 [下一步] 。
若要使用 Windows 憑證存放區:
選取 [Windows 憑證存放區]。
保留 [目前使用者 ] 的預設選取專案 - 這會指示精靈在 目前使用者 存放區中) 新資料行主要金鑰 (產生憑證。
選取 [下一步]。
在 [ 執行設定 ] 頁面上,系統會詢問您是否要繼續進行加密,或產生稍後要執行的 PowerShell 腳本。 保留預設設定,然後選取 [ 下一步]。
在 [ 摘要] 頁面上,精靈會通知您將執行的動作。 檢查所有資訊是否正確,然後選取 [ 完成]。
在 [ 結果 ] 頁面上,您可以監視精靈作業的進度。 等到所有作業都順利完成,然後選取 [ 關閉]。
(選擇性) 探索精靈在資料庫中所做的變更。
展開[ContosoHR>安全性>Always Encrypted金鑰],以探索資料行主要金鑰的中繼資料物件,以及精靈建立的資料行加密。
您也可以針對包含索引鍵中繼資料的系統目錄檢視執行下列查詢。
SELECT * FROM sys.column_master_keys; SELECT * FROM sys.column_encryption_keys SELECT * FROM sys.column_encryption_key_values
在物件總管中,以滑鼠右鍵按一下[員工]資料表,然後選取 [腳本資料表] 作為>[建立至>新查詢編輯器視窗]。 這會使用Employees資料表的CREATE TABLE語句開啟新的查詢視窗。 請注意出現在SSN和Salary資料行定義中的ENCRYPTED WITH子句。
您也可以針對 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:查詢加密的資料行
連線到您的資料庫,Always Encrypted已停用連線。
- 開啟新的查詢視窗。
- 以滑鼠右鍵按一下查詢視窗中的任何位置,然後選取 [連線>變更連線]。 這會開啟 [ 連接到 Database Engine ] 對話方塊。
- 選取 [選項 <<]。 這會在 [ 連接到 Database Engine ] 對話方塊中顯示其他索引標籤。
- 選取 [Always Encrypted] 索引標籤。
- 確定未選取 [啟用Always Encrypted (資料行加密]) 。
- 選取 [連線]。
貼上並執行下列查詢。 查詢應該會傳回二進位加密資料。
SELECT [SSN], [Salary] FROM [HR].[Employees]
連線到您的資料庫,並啟用連線Always Encrypted。
- 以滑鼠右鍵按一下查詢視窗中的任何位置,然後選取 [連線>變更連線]。 這會開啟 [ 連接到 Database Engine ] 對話方塊。
- 選取 [選項 <<]。 這會在 [ 連接到 Database Engine ] 對話方塊中顯示其他索引標籤。
- 選取 [Always Encrypted] 索引標籤。
- 選取[啟用Always Encrypted (資料行加密]) 。
- 選取 [連線]。
重新執行相同的查詢。 由於您已針對資料庫連線啟用Always Encrypted連線,因此 SSMS 中的用戶端驅動程式會嘗試解密這兩個加密資料行中儲存的資料。 如果您使用 Azure 金鑰保存庫,系統可能會提示您登入 Azure。
啟用Always Encrypted的參數化。 此功能可讓您執行依加密資料行篩選資料的查詢, (或將資料插入加密資料行) 。
- 從 SSMS 的主功能表中,選取 [查詢]。
- 選取 [查詢選項]。
- 瀏覽至 [執行]>[進階]。
- 確定已核取 [啟用Always Encrypted的參數化]。
- 選取 [確定]。
貼上並執行下列查詢,依加密 的 SSN 資料行篩選資料。 查詢應該會傳回一個包含純文字值的資料列。
DECLARE @SSN [char](11) = '795-73-9838' SELECT [SSN], [Salary] FROM [HR].[Employees] WHERE [SSN] = @SSN
您可以選擇性地使用以存取原則許可權模型設定的 Azure 金鑰保存庫,請遵循下列步驟來查看當使用者嘗試從加密資料行擷取純文字資料時會發生什麼情況,而不需要存取保護資料的資料行主要金鑰。
unwrap
在金鑰保存庫的存取原則中,為您自己移除金鑰許可權。 如需詳細資訊,請參閱指派 Key Vault 存取原則。- 由於 SSMS 中的用戶端驅動程式會快取從金鑰保存庫取得的資料行加密金鑰 2 小時,請關閉 SSMS 並再次開啟它。 這可確保金鑰快取是空的。
- 連線到您的資料庫,並啟用連線Always Encrypted。
- 貼上並執行下列查詢。 查詢應該會失敗,並顯示錯誤訊息,指出您遺漏必要的
unwrap
許可權。
SELECT [SSN], [Salary] FROM [HR].[Employees]