[SQL] 透過 TDE(透明資料加密) 進行資料庫層級加密

由於個資的保管在資安上屬於相當重要的一件事。因此在資料庫的保護上,有越來越多的保護方法
而TDE(透明資料加密)就是一個能夠透過加密整個資料庫,並且加以保護的機制
一但當資料庫的備份檔案或是資料庫被偷走,就算沒有加密用的憑證也無法進行還原與使用

要使用TDE進行資料庫加密的方式很簡單,透過幾個簡短的指令就可以完成了。
當然除了加密外,也會說明到如何進行憑證的匯出與匯入。當資料庫必須重建時,也可以順利的進行還原

使用TDE加密資料庫

要在資料庫中建立TDE的動作,依照下面的步驟就可以順利完成

1.開起SSMS,並連入到要進行資料庫加密的伺服器,並執行下列指令

USE master;
GO

-- 於master資料庫中建立加密用的主要金鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '在這裡輸入加密金鑰字串';
GO

2.接著,在master資料庫中,建立一個主要憑證,後面需要用這個憑證進行資料庫的加密

USE master;
GO

-- 建立一個憑證,SUBJECT可以自訂
CREATE CERTIFICATE MyDbCert WITH SUBJECT = 'MyDb KEY';
GO

3.當執行完上面的語法後,透過SSMS的物件總管,可以在master的資料庫中看到,MyDbCert這個憑證已經被建立起來了

4.接著切換到我們要進行加密的資料庫,並執行下面的語法

USE MyDb;
GO
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128
 ENCRYPTION BY SERVER CERTIFICATE MyDbCert;
GO
ALTER DATABASE MyDb SET ENCRYPTION ON
GO

當執行完成後,會提示請進行憑證備份的動作

看到這個訊息,就代表該資料庫已經設定好TDE的加密了。

備份憑證

接著我們可以透過下面的語法,進行憑證的備份

BACKUP CERTIFICATE MyServerCert
TO FILE='C:\File\MyDbCert'
WITH PRIVATE KEY(FILE='C:\File\MyDbCertPri',ENCRYPTION BY PASSWORD='備份用的密碼')
GO

當執行完成後,可以看到憑證已經備份到指定的目錄下了

還原資料庫

當使用TDE進行加密後的資料庫,如果在另一台新的伺服器上要進行還原時,一定會發生下面的這個訊息,這是因為原本匯出的資料庫已經採用TDE加密,但是在新的伺服器上未有憑證的關係,所以無法進行還原

要能夠順利進行還原的動作,可以照著下面的步驟進行

1.將備份出來的憑證檔,先複製到新的伺服器上

2.如同進行加密的第一步一樣,先開啟SSMS,並執行下面指令,建立加密用的主要金鑰

USE master;
GO

-- 於master資料庫中建立加密用的主要金鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '在這裡輸入加密金鑰字串';
GO

3.使用下面語法將備份的憑證,透過語法的方式進行匯入

-- 這裡我刻意將憑證改名為MyDbCert2,作為識別,以確認真的有還原
-- 實務操作可以使用原本的名字即可
CREATE CERTIFICATE MyDbCert2 
FROM FILE='C:\File\MyDbCert'
WITH PRIVATE KEY(FILE='C:\File\MyDbCertPri',DECRYPTION BY PASSWORD='備份用密碼')
GO

4.執行完成後,此時再進入到master資料庫,應該也可以看到憑證檔已經還原至伺服器的資料庫中了

5.接著,進行資料庫還原的動作,會發現資料庫已經可以順利的還原到新伺服器上了

 

TDE的加密功能,透過了SQL Server提供的機制,快速有效的進行資料內容的加密,確保資料檔被盜走或是在不同環境下也無法正確還原的保護。
對於資安的管理與實作上,提供了非常有效的保護方法。若是公司內有專職的MIS或是DBA,且資料庫內又有很敏感性的個資資料,強烈建議一定要使用這個方式保護好這些內容