共用方式為


使用 Azure Key Vault 進行可延伸金鑰管理 (SQL Server)

適用於 Microsoft Azure Key Vault 的 SQL Server 連接器可讓SQL Server加密利用 Azure 金鑰保存庫 服務作為可延伸金鑰管理 (EKM) 提供者來保護其加密金鑰。

本主題內容:

EKM 的使用方式

組織可以使用SQL Server加密來保護敏感性資料。 SQL Server加密包括透明資料加密 (TDE) 資料行層級加密 (CLE) 和備份加密。 在上述所有情況下,資料會使用對稱資料加密金鑰來加密。 對稱資料加密金鑰會以儲存在 SQL Server 中的金鑰階層加密,受到更進一步的保護。 或者,EKM 提供者架構可讓SQL Server使用儲存在外部密碼編譯提供者SQL Server外部的非對稱金鑰來保護資料加密金鑰。 使用 EKM 提供者架構會多增加一層安全性,讓組織得以分開管理金鑰和資料。

適用于 Azure 金鑰保存庫的SQL Server連接器可讓SQL Server利用可調整、高效能且高可用性的金鑰保存庫服務,作為加密金鑰保護的 EKM 提供者。 金鑰保存庫服務可以與 Microsoft Azure 虛擬機器 和內部部署伺服器上的SQL Server安裝搭配使用。 金鑰保存庫服務也提供選項,以使用受到緊密控制和監視的硬體安全性模組 (HSM),對非對稱加密金鑰提供更高等級的保護。 如需金鑰保存庫的詳細資訊,請參閱 Azure 金鑰保存庫

下列影像摘要說明使用金鑰保存庫的 EKM 處理流程。 影像中的程序步驟數字並非用以比對遵循影像的安裝步驟數字。

使用 Azure Key Vault 的 SQL Server EKM

步驟 1:設定金鑰保存庫以供 SQL Server 使用

使用下列步驟來設定金鑰保存庫,以便與 SQL Server Database Engine 搭配使用,以進行加密金鑰保護。 組織中可能已使用保存庫。 當保存庫不存在時,您組織中指定用來管理加密金鑰的 Azure 系統管理員可以建立保存庫、在保存庫中產生非對稱金鑰,然後授權SQL Server使用金鑰。 透過檢閱 開始使用 Azure Key Vault及 PowerShell Azure Key Vault Cmdlet 參考,讓自己熟悉如何使用金鑰保存庫服務。

重要

如果您有多個 Azure 訂用帳戶,則必須使用包含SQL Server的訂用帳戶。

  1. 建立保存庫: 透過 開始使用 Azure 金鑰保存庫建立金鑰保存庫一節中的指示,來建立保存庫。 記錄保存庫的名稱。 本主題使用 ContosoKeyVault 做為金鑰保存庫名稱。

  2. 在保存庫中產生非對稱金鑰:金鑰保存庫中的非對稱金鑰可用來保護SQL Server加密金鑰。 只有非對稱金鑰的公開部分可離開保存庫,保存庫絕不會匯出私用部分。 使用非對稱金鑰的所有密碼編譯作業會委派給 Azure Key Vault,並受到金鑰保存庫安全性的保護。

    您可以使用數種方式來產生非對稱金鑰,並將它儲存在保存庫。 您可以在外部產生金鑰,並將金鑰以 .pfx 檔案形式匯入到保存庫。 或使用金鑰保存庫 API 直接在保存庫中建立金鑰。

    SQL Server 連接器需要非對稱金鑰為 2048 位 RSA,且金鑰名稱只能使用字元 「a-z」、「A-Z」、「0-9」 和 「-」。 在本文件中,非對稱金鑰的名稱會是 ContosoMasterKey。 請以您用於金鑰的唯一名稱來取代這個名稱。

    重要

    強烈建議在生產案例中匯入非對稱金鑰,因為這樣做可讓系統管理員在金鑰委付系統中委付金鑰。 如果非對稱金鑰是在保存庫中建立,由於私密金鑰永遠不會離開保存庫,因此無法委付金鑰。 您應該委付用來保護重要資料的金鑰。 遺失非對稱金鑰會導致資料永久無法復原。

    重要

    金鑰保存庫支援多種版本的相同指定金鑰。 SQL Server連接器所使用的金鑰不應建立版本或復原。 如果系統管理員想要變換用於SQL Server加密的金鑰,則應在保存庫中建立具有不同名稱的新金鑰,並用來加密 DEK。

    如需如何將金鑰匯入金鑰保存庫或在金鑰保存庫中建立金鑰 (生產環境不建議使用) 的詳細資訊,請參閱 開始使用 Azure Key Vault中的將金鑰或密碼加入金鑰保存庫一節。

  3. 取得要用於 SQL Server 的 Azure Active Directory 服務主體: 當組織註冊 Microsoft 雲端服務時,它會取得 Azure Active Directory。 在 Azure Active Directory 中建立服務主體,以便SQL Server在存取金鑰保存庫時,使用 (向 Azure Active Directory) 驗證本身。

    • SQL Server系統管理員需要一個服務主體,才能存取保存庫,同時將SQL Server設定為使用加密。

    • SQL Server Database Engine 需要另一個服務主體,才能存取保存庫以解除包裝SQL Server加密中使用的金鑰。

    如需如何註冊應用程式及產生服務主體的詳細資訊,請參閱 開始使用 Azure Key Vault 中的 使用 Azure Active Directory 註冊應用程式一節。 註冊程序會針對每個 Azure Active Directory 服務主體 ,傳回 應用程式識別碼(又稱為 用戶端識別碼 ) 和 驗證金鑰(又稱為 密碼)。 在 語句中使用 CREATE CREDENTIAL 時,必須從 用戶端識別碼中移除連字號。 請記錄這些項目,以用於下列指令碼:

    • sysadmin 登入的 服務主體CLIENTID_sysadmin_loginSECRET_sysadmin_login

    • SQL Server Database Engine的服務主體CLIENTID_DBEngineSECRET_DBEngine

  4. 授與服務主體存取金鑰保存庫的權限:服務主體 都需要金鑰保存庫中的 get, list, wrapKey, unwrapKey 權限。 如果您想要透過 SQL Server 建立金鑰,您也需要在金鑰保存庫中授與建立許可權。

    重要

    使用者必須至少具有這個金鑰保存庫的 wrapKeyunwrapKey 作業。

    如需授與保存庫權限的詳細資訊,請參閱 開始使用 Azure Key Vault中的授權應用程式使用金鑰或密碼一節。

    Azure Key Vault 文件的連結

步驟 2:安裝 SQL Server Connector

SQL Server連接器是由SQL Server電腦的系統管理員下載並安裝。 SQL Server連接器可從Microsoft 下載中心下載。 搜尋 SQL Server Connector for Microsoft Azure Key Vault,檢閱詳細資料、系統需求和安裝指示,然後選擇下載連接器並使用 [執行] 開始安裝。 檢閱授權,然後接受授權並繼續。

根據預設,連接器會安裝在C:\Program Files\適用於 Microsoft Azure Key Vault 的 SQL Server 連接器。 這個位置可以在安裝期間變更。 (如果變更,請調整下列指令碼)。

完成安裝時,電腦上會安裝下列項目:

  • Microsoft.AzureKeyVaultService.EKM.dll:這是必須使用 CREATE CRYPTOGRAPHIC PROVIDER 語句向 SQL Server 註冊的密碼編譯 EKM 提供者 DLL。

  • Azure Key Vault SQL Server Connector:這是 Windows 服務,可讓密碼編譯的 EKM 提供者與金鑰保存庫通訊。

SQL Server 連接器安裝也可讓您選擇性地下載 SQL Server 加密的範例指令碼。

步驟 3:設定 SQL Server 對金鑰保存庫使用 EKM 提供者

權限

若要完成這整個程序,需要 CONTROL SERVER 權限或 sysadmin 固定伺服器角色中的成員資格。 特定動作需要下列權限:

  • 若要建立密碼編譯提供者,需要 CONTROL SERVER 權限或 sysadmin 固定伺服器角色中的成員資格。

  • 若要變更組態選項及執行 RECONFIGURE 陳述式,您必須取得 ALTER SETTINGS 伺服器層級的權限。 系統管理員 (sysadmin)serveradmin 固定伺服器角色會隱含 ALTER SETTINGS 權限。

  • 若要建立認證,需要 ALTER ANY CREDENTIAL 權限。

  • 若要將認證加入登入,需要 ALTER ANY LOGIN 權限。

  • 若要建立非對稱金鑰,需要 CREATE ASYMMETRIC KEY 權限。

設定 SQL Server 使用密碼編譯提供者

  1. 將 Database Engine 設定為使用 EKM,並使用 SQL Server 註冊 (建立密碼編譯提供者) 。

    -- Enable advanced options.
    USE master;
    GO
    
    sp_configure 'show advanced options', 1 ;
    GO
    RECONFIGURE ;
    GO
    -- Enable EKM provider
    sp_configure 'EKM provider enabled', 1 ;
    GO
    RECONFIGURE ;
    GO
    
    -- Create a cryptographic provider, using the SQL Server Connector
    -- which is an EKM provider for the Azure Key Vault. This example uses 
    -- the name AzureKeyVault_EKM_Prov.
    
    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov 
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO
    
  2. 為SQL Server系統管理員登入設定SQL Server認證,以使用金鑰保存庫來設定和管理SQL Server加密案例。

    重要

    CREATE CREDENTIALIDENTITY引數需要金鑰保存庫名稱。 的 CREATE CREDENTIALSECRET引數需要< 用戶端識別碼 > (,而不需要連字號) 和< 秘密 >一起傳遞,而不會在兩者之間有空格。

    在下列範例中, 用戶端識別碼 (EF5C8E09-4D2A-4A76-9998-D93440D8115D) 會移除連字號,並輸入為字串 EF5C8E094D2A4A769998D93440D8115D而 Secret 則以字串 表示SECRET_sysadmin_login

    USE master;
    CREATE CREDENTIAL sysadmin_ekm_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_sysadmin_login' 
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
    -- Add the credential to the SQL Server administrators domain login 
    ALTER LOGIN [<domain>/<login>]
    ADD CREDENTIAL sysadmin_ekm_cred;
    

    如需針對引數使用變數, CREATE CREDENTIAL 並以程式設計方式從用戶端識別碼移除連字號的範例,請參閱 CREATE CREDENTIAL (Transact-SQL)

  3. 如果您已如第 3 節步驟 1 所述匯入非對稱金鑰,請在下列範例中提供您的金鑰名稱,以開啟金鑰。

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    雖然不建議用於生產 (,因為無法) 匯出金鑰,但可以從SQL Server直接在保存庫中建立非對稱金鑰。 如果您之前沒有匯入金鑰,則可以使用下列指令碼,在金鑰保存庫中建立非對稱金鑰進行測試。 使用 sysadmin_ekm_cred 認證提供的登入來執行指令碼。

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH ALGORITHM = RSA_2048,
    PROVIDER_KEY_NAME = 'ContosoMasterKey';
    

提示

收到錯誤的使用者 無法從提供者匯出公開金鑰。提供者錯誤碼:2053。 應該檢查金鑰保存庫中的 getlistwrapKeyunwrapKey 許可權。

如需詳細資訊,請參閱下列:

範例

範例 A:使用金鑰保存庫中的非對稱金鑰進行透明資料加密

完成上述步驟之後,請建立認證和登入,並建立受到金鑰保存庫中非對稱金鑰保護的資料庫加密金鑰。 請使用資料庫加密金鑰透過 TDE 來加密資料庫。

若要加密資料庫,需要資料庫的 CONTROL 權限。

使用 EKM 和金鑰保存庫啟用 TDE
  1. 建立 SQL Server 認證,以供資料庫引擎在資料庫載入期間用於存取金鑰保存庫 EKM。

    重要

    CREATE CREDENTIALIDENTITY引數需要金鑰保存庫名稱。 的 CREATE CREDENTIALSECRET引數需要< 用戶端識別碼 > (,而不需要連字號) 和< 秘密 >一起傳遞,而不會在兩者之間有空格。

    在下列範例中, 用戶端識別碼 (EF5C8E09-4D2A-4A76-9998-D93440D8115D) 已移除連字號並以字串 EF5C8E094D2A4A769998D93440D8115D 輸入,而 密碼 會以字串 SECRET_DBEngine來表示。

    USE master;
    CREATE CREDENTIAL Azure_EKM_TDE_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine' 
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
  2. 建立資料庫引擎 for TDE 要使用的SQL Server登入,並將認證新增至其中。 這個範例使用儲存在金鑰保存庫中的 CONTOSO_KEY 非對稱金鑰,這是稍早針對 master 資料庫匯入或建立的金鑰,如上面的 第 3 節步驟 3 所述。

    USE master;
    -- Create a SQL Server login associated with the asymmetric key 
    -- for the Database engine to use when it loads a database 
    -- encrypted by TDE.
    CREATE LOGIN TDE_Login 
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO 
    
    -- Alter the TDE Login to add the credential for use by the 
    -- Database Engine to access the key vault
    ALTER LOGIN TDE_Login 
    ADD CREDENTIAL Azure_EKM_TDE_cred ;
    GO
    
  3. 建立要用於 TDE 的資料庫加密金鑰 (DEK)。 DEK 可使用 SQL Server 支援的任何演算法或金鑰長度來建立。 DEK 受到金鑰保存庫中非對稱金鑰的保護。

    這個範例使用儲存在金鑰保存庫中的 CONTOSO_KEY 非對稱金鑰,這是稍早匯入或建立的金鑰,如上面的 第 3 節步驟 3 所述。

    USE ContosoDatabase;
    GO
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase 
    SET ENCRYPTION ON ;
    GO
    

    如需詳細資訊,請參閱下列:

範例 B:使用金鑰保存庫中的非對稱金鑰進行備份加密

從 SQL Server 2014 開始,支援加密備份。 下列範例如何建立及還原以資料加密金鑰加密的備份,這個資料加密金鑰受到金鑰保存庫中非對稱金鑰的保護。

USE master;
BACKUP DATABASE [DATABASE_TO_BACKUP]
TO DISK = N'[PATH TO BACKUP FILE]' 
WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, 
ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
GO

範例還原程式碼。

RESTORE DATABASE [DATABASE_TO_BACKUP]
FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE;
GO

如需備份選項的詳細資訊,請參閱 BACKUP (Transact-SQL)

範例 C:使用金鑰保存庫中的非對稱金鑰進行資料行層級加密

下列範例會建立受到金鑰保存庫中非對稱金鑰保護的對稱金鑰。 然後使用對稱金鑰加密資料庫中的資料。

這個範例使用儲存在金鑰保存庫中的 CONTOSO_KEY 非對稱金鑰,這是稍早匯入或建立的金鑰,如上面的 第 3 節步驟 3 所述。 若要在 ContosoDatabase 資料庫中使用這個非對稱金鑰,您必須再執行一次 CREATE ASYMMETRIC KEY 陳述式,以提供參考這個金鑰的 ContosoDatabase 資料庫。

USE [ContosoDatabase];
GO

-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY 
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
CREATION_DISPOSITION = OPEN_EXISTING;

-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server 
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
    WITH ALGORITHM=AES_256
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY 
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

另請參閱

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL) CREATE CREDENTIAL (Transact-SQL) CREATE ASYMMETRIC KEY (Transact-SQL) CREATE SYMMETRIC KEY (Transact-SQL) Extensible Key Management (EKM) 使用 EKM 備份加密建立加密備份來啟用 TDE