共用方式為


使用 EKM 在 SQL Server 上啟用透明資料加密

適用於: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

  1. 將 EKM 提供者提供的檔案複製到 SQL Server 電腦上的適當位置。 在此範例中,我們使用 C:\EKM_Files 資料夾。

  2. 依照 EKM 提供者的要求將憑證安裝到電腦上。

    注意

    SQL Server 不提供 EKM 提供者。 每個 EKM 提供者都會有安裝、設定和授權使用者的不同程序。 若要完成此步驟,請參閱您的 EKM 提供者文件。

  3. 物件總管中,連線至資料庫引擎的一個執行個體。

  4. 在標準列上,選取 [新增查詢]

  5. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。

    -- 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