使用 Azure 保存庫的可延伸金鑰管理 (SQL Server)
SQL Server Connector for Microsoft Azure 金鑰保存庫可讓 SQL Server 加密,能利用 Azure 金鑰保存庫服務做為可延伸金鑰管理 (EKM)提供者,以保護其加密金鑰。
本主題章節:
EKM 的使用方式
步驟 1:設定金鑰保存庫供 SQL Server 使用
步驟 2:安裝 SQL Server 連接器
步驟 3:將 SQL Server 設定成為金鑰保存庫使用 EKM 提供者
範例 A:從金鑰保存庫使用非對稱金鑰進行無感資料加密
範例 B:從金鑰保存庫使用非對稱金鑰加密備份
範例 C:從金鑰保存庫使用非對稱金鑰進行資料行層級加密
EKM 的使用方式
組織可使用 SQL Server 加密來保護機密資料。 SQL Server 加密包含透明資料加密 (TDE)、資料行層級加密 (CLE) 以及Backup Encryption。 在所有這些情況下,資料都會使用對稱式資料加密金鑰進行加密。 利用 SQL Server 中儲存的金鑰階層對金鑰進行加密,能讓對稱式資料加密金鑰受到更進一步的保護。 另一個方法是,EKM 提供者架構使用儲存於密碼編譯提供者中 SQL Server 以外的非對稱金鑰,啟用 SQL Server 以保護資料加密金鑰。 使用 EKM 提供者架構加入額外的安全性,並讓組織能個別管理金鑰與資料。
SQL Server Connector for Azure 金鑰保存庫可讓 SQL Server 運用有擴充能力且兼具高效能與高可用性的金鑰保存庫服務,做為加密金鑰保護的 EKM 提供者。 金鑰保存庫服務可以搭配 SQL Server 安裝,一起用於 Microsoft Azure 虛擬機器上以及用於內部部署伺服器。 金鑰保存庫服務也提供可使用緊密控制及監視硬體安全性模組 (Hsm),進行更高階的非對稱式加密金鑰保護。 如需金鑰保存庫的詳細資訊,請參閱 Azure 金鑰保存庫。
回到頁首
下圖摘要說明使用金鑰保存庫的 EKM 處理流程。 該影像中程序步驟的數字,並非供您對應到該影像下安裝步驟的數字。
步驟 1:設定金鑰保存庫供 SQL Server 使用
使用下列步驟設定金鑰保存庫,以與 SQL Server Database Engine 搭配使用,進行加密金鑰的保護。 組織可能已使用了保存庫。 保存庫不存在時,貴組織中指定為可管理加密金鑰的 Azure 系統管理員,可以建立保存庫、在保存庫中產生非對稱金鑰,然後再授權 SQL Server 使用金鑰。 若要熟悉金鑰保存庫服務,請檢閱開始使用 Azure 金鑰保存庫,以及 PowerShell Azure 金鑰保存庫 Cmdlet 參考。
重要事項 |
---|
如果您有多個 Azure 訂用帳戶,必須使用包含 SQL Server 的訂用帳戶。 |
建立保存庫:使用開始使用 Azure 金鑰保存庫中建立金鑰保存庫一節中的指示,建立保存庫。 記下保存庫名稱。 本主題使用 ContosoKeyVault 做為金鑰保存庫名稱。
**在保存庫中產生非對稱金鑰:**金鑰保存庫中的非對稱金鑰可用以保護 SQL Server 加密金鑰。 只有非對稱金鑰的公用部分會離開保存庫,保存庫一律不會匯出私用部分。 使用非對稱金鑰的所有密碼編譯作業,皆會委派至 Azure 金鑰保存庫,並受到金鑰保存庫安全性的保護。
您有數種方式可產生非對稱金鑰,並將其儲存於保存庫中。 您可於外部產生金鑰,並將該金鑰以 .pfx 檔案的方式匯入保存庫。 或使用金鑰保存庫 API,直接在保存庫中建立金鑰。
SQL Server 連接器需要非對稱金鑰為 2048 位元的 RSA,且金鑰的名稱只可使用字元 "a-z"、"A-Z"、"0-9" 和 "-"。 在本文件中非對稱金鑰的名稱以 ContosoMasterKey 表示。 請以您為金鑰所使用且不重複的名稱取代此項目。
安全性注意事項 在實際執行的情況下,非常建議您匯入非對稱金鑰,因為如此可讓系統管理員能委付位於金鑰委付系統中的金鑰。 如果在保存庫中建立了非對稱金鑰,則其會因為私密金鑰一律不得離開保存庫而無法委付。 用以保護重要資料的金鑰應該要委付。 遺失的非對稱金鑰會導致資料永久無法復原。
安全性注意事項 金鑰保存庫支援同名的多重版本金鑰。 SQL Server 連接器使用的金鑰不應該設定版本或進行復原。 如果系統管理員想要輪用為 SQL Server 加密所使用的金鑰,應於保存庫中以不同的名稱建立新的金鑰,並將其用於加密 DEK。
如需如何將金鑰匯入金鑰保存庫或在金鑰的保存庫 (不建議在實際執行環境) 中匯入金鑰的詳細資訊,請參閱開始使用 Azure 金鑰保存庫中的將金鑰或密碼加入金鑰保存庫中一節。
重要事項 使用者至少必須要有金鑰保存庫的 wrapKey 與 unwrapKey 作業。
取得 Azure Active Directory 服務主體以用於 SQL Server: 當組織註冊 Microsoft 雲端服務時,其會取得 Azure Active Directory。 在 Azure Active Directory 中建立服務主體,供 SQL Server 於存取金鑰保存庫時使用 (以對 Azure Active Directory 進行驗證)。
SQL Server 系統管理員需要一個服務主體,才可於設定 SQL Server 以使用加密時,能存取保存庫。
SQL Server Database Engine 需要另一個服務主體,才可存取用於 SQL Server 加密中未包裝的保存庫。
如需如何註冊應用程式並產生服務主體的詳細資訊,請參閱開始使用 Azure 金鑰保存庫中的利用 Azure Active Directory 註冊應用程式一節。 註冊程序會為每個 Azure Active Directory 服務主體傳回應用程式識別碼 (也稱為用戶端識別碼) 以及驗證金鑰 (也稱為密碼)。 用於 CREATE CREDENTIAL 陳述式中時,必須從用戶端識別碼移除連字號。 記下以下指令碼中的這些用法:
sysadmin 登入的服務主體:CLIENTID_sysadmin_login 與 SECRET_sysadmin_login
SQL Server Database Engine 的 服務主體:CLIENTID_DBEngine 與 SECRET_DBEngine。
**為服務主體授與存取金鑰保存庫的權限:**這兩個 CLIENTID_sysadmin_login 與 CLIENTID_DBEngine 服務主體,需要金鑰保存庫中 get、list、wrapKey 與 unwrapKey 的權限。 如果您想要透過 SQL Server 建立金鑰,還必須授與金鑰保存庫中的 create 權限。
如需對保存庫授與權限的詳細資訊,請參閱開始使用 Azure 金鑰保存庫 中的 授權應用程式使用金鑰或密碼一節。
Azure 金鑰保存庫文件的連結
PowerShell Azure 金鑰保存庫 Cmdlet 參考
回到頁首
步驟 2:安裝 SQL Server 連接器
SQL Server 電腦的系統管理員可下載及安裝 SQL Server 連接器。 您可以從 Microsoft 下載中心下載 SQL Server 連接器。 搜尋 SQL Server Connector for Microsoft Azure 金鑰保存庫,檢閱詳細資料、系統需求以及安裝指示,並選擇下載連接器同時使用 [執行] 開始安裝。 檢閱授權並接受授權後繼續。
連接器預設會安裝在 C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault。 安裝期間可以變更此位置。 (若有變更,請調整以下指令碼)。
完成安裝後,電腦上會安裝下列項目:
Microsoft.AzureKeyVaultService.EKM.dll:這是密碼編譯的 EKM 提供者 DLL,必須使用 CREATE CRYPTOGRAPHIC PROVIDER 陳述式註冊到 SQL Server。
Azure 金鑰保存庫 SQL 伺服器連接器:這是 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 權限。
[Top]
若要設定 SQL Server 使用密碼編譯提供者
設定 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
為 SQL Server 系統管理員登入安裝 SQL Server 認證,以使用金鑰保存庫來設定及管理 SQL Server 加密案例。
重要事項 CREATE CREDENTIAL 的 IDENTITY 引數需要金鑰保存庫名稱。 CREATE CREDENTIAL 的 SECRET 引數需要一起傳遞<用戶端識別碼> (不含連字號) 以及<密碼>,且兩者之間沒有空格。
在下列範例中,用戶端識別碼 (EF5C8E09-4D2A-4A76-9998-D93440D8115D) 已除去連字號且輸入為字串 EF5C8E094D2A4A769998D93440D8115D,而密碼則由字串 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 節中步驟 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';
如需詳細資訊,請參閱下列內容:
[Top]
範例
範例 A:從金鑰保存庫使用非對稱金鑰進行無感資料加密
完成上述步驟之後,請建立認證與登入,建立金鑰保存庫中非對稱金鑰所保護的資料庫加密金鑰。 使用資料庫加密金鑰來加密具備 TDE 的資料庫。
若要加密資料庫,需要對資料庫有 CONTROL 權限。
若要啟用 TDE,請使用 EKM 與金鑰保存庫
建立 Database Engine 的 SQL Server 認證,以於載入資料庫期間存取金鑰保存庫 EKM 時使用。
重要事項 CREATE CREDENTIAL 的 IDENTITY 引數需要金鑰保存庫名稱。 CREATE CREDENTIAL 的 SECRET 引數需要一起傳遞<用戶端識別碼> (不含連字號) 以及<密碼>,且兩者之間沒有空格。
在下列範例中,用戶端識別碼 (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 ;
為 TDE 建立 Database Engine 會使用的 SQL Server 登入,並為其新增認證。 這個範例使用儲存在金鑰保存庫中的 CONTOSO_KEY 非對稱金鑰 (如之前第 3 節中步驟 3 中所述,已於稍早為 master 資料庫匯入或建立)。
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
建立將用於 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:從金鑰保存庫使用非對稱金鑰加密備份
從 開始,可支援加密備份。 下列範例會建立及還原備份,而其已加密金鑰保存庫中非對稱金鑰所保護的資料加密金鑰。
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)