閱讀424 返回首頁    go 阿裏雲 go 技術社區[雲棲]


開啟TDE的RDS SQL Server還原到本地環境

問題引入

阿裏雲RDS SQL Server 2008 R2版本,客戶在前端控製台可以自行啟用透明數據加密(TDE),來避免客戶數據庫備份文件被非法盜取而引起拖庫風險。最近,客戶谘詢如何將開啟了TDE的數據庫還原到本地環境,這篇文章的目的就是為了解決這個問題。

前提條件

請仔細閱讀以下限製條件,缺一不可。
 版本限製:僅針對RDS SQL Server 2008 R2版本。
 啟用了TDE:客戶在前端控製台啟用了TDE並且任務已經完成(一旦啟用,無法再次關閉TDE)。
 備份文件:下載的備份文件是啟用了TDE之後的備份文件。
 證書相關文件:證書文件、證書秘鑰文件和證書加密密碼,三者缺一不可。請找阿裏雲索取這三個必要文件。

注意事項

SQL Server TDE技術可以有效防止拖庫的安全風險,但是它也是一把雙刃劍,在保證安全的同時也要付出一定的成本。在開啟TDE之前,請仔細衡量以下注意事項:
 性能下降:開啟了TDE的數據庫會有一定的性能損失。到底有多大的性能損失,可以參見這篇文章SQL Server Transparent Data Encryption (TDE) Performance Comparison
 TDE功能一旦啟用而無法再次關閉,沒有後悔藥,而由此導致的性能損失由客戶自己承擔責任。
 目前僅RDS SQL Server 2008 R2提供TDE功能。

RDS上的測試表

為了測試開啟了TDE的RDS SQL Server實例如何還原到本地,我們先在RDS上創建測試環境:創建測試表,插入兩條數據。

use testtde
GO

create table dbo.testTDE(
id int identity(1,1) not null primary key
,name varchar(10)
);

insert into testTDE
select 'AA' union all select 'BB'
GO

select * from testtde.dbo.testTDE

檢查測試環境,截圖如下所示:
01.png

還原到本地

還原證書之前

在還原證書之前,即使您拿到了阿裏雲RDS SQL Server的備份文件,你也無法查看和使用備份文件,因為你沒有證書文件相關文件。比如:查看備份文件列表,直接報錯:

USE master
GO

RESTORE FILELISTONLY   
   FROM DISK = 'C:\Temp\testtde.bak' ;  

錯誤信息如下所示:
02.png

由此可見啟用了TDE的RDS SQL Server可以非常有效地防止拖庫行為。

詳細步驟

在證書還原之前,我們是無法使用備份文件的,達到了防止備份文件被偷窺的目的。以下是如何還原到本地環境的詳細步驟:創建Master Key;創建證書;還原數據庫。

USE master
GO
CREATE MASTER KEY 
ENCRYPTION BY PASSWORD='MyMasterKey'
GO

---這裏需要特別強調,證書文件cer_tde.cer、證書秘鑰文件cer_tde.pvk和加密密碼,請找阿裏雲索取。
CREATE CERTIFICATE cer_tde
FROM FILE = 'C:\Temp\cer_tde.cer'
WITH PRIVATE KEY (FILE = 'C:\Temp\cer_tde.pvk',
DECRYPTION BY PASSWORD = 'tde_password')
GO

---還原證書後,再次讀取備份文件,這裏可以成功。參見截圖圖三
RESTORE FILELISTONLY   
   FROM DISK = 'C:\Temp\testtde.bak' ;  
GO

---還原證書後,成功還原數據庫到本地。參見截圖圖四
RESTORE DATABASE TestTDE   
   FROM DISK = N'C:\Temp\testtde.bak' 
   WITH MOVE 'data1' TO 'C:\Temp\TestTDE.mdf',  
   MOVE 'log' TO 'C:\Temp\TestTDE_log.ldf';  
GO  
---檢查測試表數據。參見截圖圖五
SELECT * FROM TestTDE.dbo.testTDE;

圖三:還原證書後,成功讀取到備份文件
03.png

圖四:還原證書後,成功還原數據庫到本地
04.png

圖五:測試表數據和原始數據庫保持一致
05.png

參考文章

SQLServer · 最佳實踐 · 透明數據加密TDE在SQLServer的應用

最後更新:2017-04-01 17:04:39

  上一篇:go 程序員的常見“謊話”:對,這是一個已知 Bug
  下一篇:go DT科技評論第32期:“電子紋身”可以控製智能設備