前兩篇介紹了SQL Server的的透明資料加密(Transparent Data Encryption:TDE)的觀念以及如何實作,接下來這篇進一步跟大家介紹如何管理跟備份,以及如何匯入到新的執行個體。
所謂的管理,是要教您如何判斷SQL Server是否具有已加密的主要金鑰,以及管理憑證,並且教您如何進行憑證備份,以及匯入到另外一個SQL Server執行個體。
[確認金鑰]
要使用透明資料加密的第一步,就是要先建立主要金鑰,如果您要判斷SQL Server是否具有已加密的主要金鑰,請執行下列範例,用來判斷主要金鑰是否存在:
SELECT name ,is_master_key_encrypted_by_server
FROM sys.databases;
GO
其中name代表資料庫名稱,該名稱在 SQL Server 的執行個體內是唯一的。is_master_key_encrypted_by_server則是判斷是否具有已加密的主要金鑰(1 = 資料庫具有已加密的主要金鑰,0 = 資料庫沒有已加密的主要金鑰。)。執行上列範例,您可以看到如下列執行結果,本範例中master資料庫已經具有已加密的主要金鑰(上一篇範例所建立的金鑰)。
[檢視憑證]
確認了主要金鑰之後,我們接著要檢視受到主要金鑰保護的憑證,請執行下列範例,用來檢視憑證:
SELECT name ,subject,start_date,expiry_date,
pvt_key_encryption_type_desc,pvt_key_last_backup_date
FROM sys.certificates
WHERE pvt_key_encryption_type='MK';
GO
其中name憑證的名稱(上一篇範例設定為'MyServerCert')。在資料庫中,這是唯一的。subject這個憑證的主旨(上一篇範例設定為'My DEK Certificate')。start_date此憑證生效日期。expiry_date此憑證逾期日期。pvt_key_encryption_type_desc私密金鑰加密方式的描述。pvt_key_last_backup_date此憑證的私密金鑰上一次匯出的日期和時間。
在上列程式碼中,我們將憑證的type指定為'MK'(pvt_key_encryption_type='MK'),因為我們只要檢視我們所要的憑證即可。憑證的type說明(描述)如下:
NA = 憑證沒有私密金鑰(NO_PRIVATE_KEY)。
MK = 私密金鑰是由主要金鑰加密(ENCRYPTED_BY_MASTER_KEY)。
PW = 私密金鑰是由使用者自訂密碼加密(ENCRYPTED_BY_PASSWORD)。
SK = 私密金鑰是由服務主要金鑰加密(ENCRYPTED_BY_SERVICE_MASTER_KEY)。
下列就是程式碼執行結果:
其中我們可以看到因為我們還沒有對憑證進行備份,所以pvt_key_last_backup_date的值為NULL,此時如果您使用SSMS設定TDE的時候,會看到如下圖,提示您還未備份憑證。
[備份憑證]
接下來我們就可以將已經建立的憑證,進行匯出備份的動作,當然匯出後的憑證請妥善保存與管理,範例程式碼如下:
BACKUP CERTIFICATE MyServerCert
TO FILE='D:\MyServerCert'
WITH PRIVATE KEY(FILE='D:\MySrvCertPrik',ENCRYPTION BY PASSWORD='mypassword')
GO
此範例中MyServerCert您可以替換為您憑證的名稱,FILE後面可以替換為您要儲存憑證的位置,而mypassword可以替換為您要設定的密碼,執行的畫面如下:
此範例會將我們用來進行加密的憑證MyServerCert,以及該憑證的私密金鑰,一起匯出存入到D:\下,如下圖所示,並且會使用我們設定的密碼來保護匯出的資訊。
備份完成後,您可以在檢視一下憑證資訊,如下圖所示,您可以看到pvt_key_last_backup_date的值為已經更新為我們剛剛進行Backup的時間點。
此時如果您再使用SSMS設定TDE的時候,會看到如下圖,提示由未備份憑證改為[就緒]。
[匯入憑證]
當您需要將已經使用透明資料加密的資料庫還原或附加到其他SQL Server執行個體時,您會需要將我們在上一節中所備份的憑證匯入,匯入憑證之前,您必須先建立資料庫主要金鑰,範例程式如下:
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';
GO
在上列範例中,您可以將<UseStrongPasswordHere>替換為您所要設定的密碼,如下列執行結果,就是將密碼設定為!kk667jj578。
接著使用CREATE CERTIFICATE將憑證匯入,請執行下列範例,用來匯入憑證:
CREATE CERTIFICATE MyServerCert
FROM FILE='D:\MyServerCert'
WITH PRIVATE KEY(FILE='D:\MySrvCertPrik',ENCRYPTION BY PASSWORD='mypassword')
GO
這樣您就可以在新的執行個體上正確的將已經使用透明資料加密的資料庫還原或附加。
到這裡搭配前面兩篇,您對透明資料加密除了觀念與實作之外,也了解了如何管理與備份,並且知道如何匯入到新的SQL Server執行個體。