適用於:SQL Server
本文描述如何使用 Transact-SQL,在 SQL Server 中使用可延伸金鑰管理 (EKM) 模組中儲存的非對稱金鑰來啟用透明資料加密 (TDE),以保護資料庫加密金鑰。
TDE 會使用稱為資料庫加密金鑰的對稱金鑰來加密整個資料庫的儲存體。 資料庫加密金鑰也可以使用憑證來保護,憑證受資料庫的 master 資料庫主要金鑰 (DMK) 保護。 如需使用 DMK 保護資料庫加密金鑰的詳細資訊,請參閱 透通資料加密 (TDE)。 如需在 Azure 虛擬機器上執行 SQL Server 時設定 TDE 的相關資訊,請參閱 使用 Azure 金鑰保存庫 (SQL Server) 進行可延伸金鑰管理。 如需使用 Azure 金鑰保存庫中的金鑰設定 TDE 的相關資訊,請參閱 搭配使用 SQL Server 連接器與 SQL 加密功能。
局限性
您必須是高權限使用者 (如系統管理員) 才能建立資料庫加密金鑰及加密資料庫。 EKM 模組必須能夠驗證該使用者。
啟動時,資料庫引擎必須開啟資料庫。 您應該建立將由 EKM 鑑別的認證,並將它新增至以非對稱金鑰為基礎的登入。 使用者無法使用該登入登入,但資料庫引擎可以使用 EKM 裝置驗證自己。
如果儲存在 EKM 模組中的非對稱金鑰遺失,SQL Server 就無法開啟資料庫。 如果 EKM 提供者可讓您備份非對稱金鑰,您應該建立備份,並將它儲存在安全的位置。
EKM 提供者所需的選項和參數可能與下列程式碼範例中提供的選項和參數不同。 如需詳細資訊,請洽詢 EKM 提供者。
權限
本文使用下列權限:
若要變更配置選項並執行
RECONFIGURE陳述式,您必須授與ALTER SETTINGS伺服器層次許可權。ALTER SETTINGS權限隱含地由 和 serveradmin 固定伺服器角色持有。需要
ALTER ANY CREDENTIAL許可。需要
ALTER ANY LOGIN許可。需要
CREATE ASYMMETRIC KEY許可。需要
CONTROL資料庫的權限才能加密資料庫。
使用 Transact-SQL
將 EKM 提供者提供的檔案複製到 SQL Server 電腦上的適當位置。 在此範例中,我們使用
C:\EKM_Files資料夾。依照 EKM 提供者的要求將憑證安裝到電腦上。
注意
SQL Server 不提供 EKM 提供者。 每個 EKM 提供者都會有安裝、設定和授權使用者的不同程序。 若要完成此步驟,請參閱您的 EKM 提供者文件。
在物件總管中,連線至資料庫引擎的一個執行個體。
在標準列上,選取 [新增查詢]。
複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。
-- Enable advanced options. EXECUTE sp_configure 'show advanced options', 1; GO RECONFIGURE; GO -- Enable EKM provider EXECUTE sp_configure 'EKM provider enabled', 1; GO RECONFIGURE; GO -- Create a cryptographic provider, which we have chosen to call "EKM_Prov," based on an EKM provider CREATE CRYPTOGRAPHIC PROVIDER EKM_Prov FROM FILE = 'C:\EKM_Files\KeyProvFile.dll'; GO -- Create a credential that will be used by system administrators. CREATE CREDENTIAL sa_ekm_tde_cred WITH IDENTITY = 'Identity1', SECRET = '<password>' FOR CRYPTOGRAPHIC PROVIDER EKM_Prov; GO -- Add the credential to a high privileged user such as your -- own domain login in the format [DOMAIN\login]. ALTER LOGIN [Contoso\Mary] ADD CREDENTIAL sa_ekm_tde_cred; GO -- create an asymmetric key stored inside the EKM provider USE master; GO CREATE ASYMMETRIC KEY ekm_login_key FROM PROVIDER [EKM_Prov] WITH ALGORITHM = RSA_512, PROVIDER_KEY_NAME = 'SQL_Server_Key'; GO -- Create a credential that will be used by the Database Engine. CREATE CREDENTIAL ekm_tde_cred WITH IDENTITY = 'Identity2', SECRET = '<secret>' FOR CRYPTOGRAPHIC PROVIDER EKM_Prov; -- Add a login used by TDE, and add the new credential to the login. CREATE LOGIN EKM_Login FROM ASYMMETRIC KEY ekm_login_key; GO ALTER LOGIN EKM_Login ADD CREDENTIAL ekm_tde_cred; GO -- Create the database encryption key that will be used for TDE. USE AdventureWorks2022; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER ASYMMETRIC KEY ekm_login_key; GO -- Alter the database to enable transparent data encryption. ALTER DATABASE AdventureWorks2022 SET ENCRYPTION ON; GO