有些時候,為了節省storage空間,但又需要符合法令的保存期限或是備援需要,我們會將資料庫備份檔案(.bak
)放置到其他媒體上作週期性或永久的保留。
可以儲存的媒體像是磁帶(Tape
)、硬碟(Disk
)甚至直接備份上到雲端(cloud
)等,但因為備份檔案只要出了嚴密防衛的京城就會出現更多風險要管理,另外昨天複習到的透明資料加密(TDE)也有一些壓縮及效能的副作用(side effect),如果剛好只想保護資料庫備份檔案(.bak
),也許我們可以透過備份加密碼或是備份加密兩種方式。
本來想實作密碼的,但一查發現,備份檔案加密碼在SQL Server 2012已經被取消。
從 SQL Server 2012 開始, PASSWORD 和 MEDIAPASSWORD 選項無法再用於建立備份。
為容相同之前版本的備份,只剩下還原時可以使用密碼開啟舊版本SQL建立的備份。
好,剩下加密這一種方法了。
加密備份是SQL Server 2014新功能,標準版、企業版都支援:
Msdn上提到的優點:
加密資料庫備份能幫助您確保資料的安全:SQL Server 提供建立備份時加密備份資料的選項。
加密亦可用於使用 TDE 加密的資料庫。
SQL Server Managed Backup to Microsoft Azure建立的備份支援加密,可提供離站備份額外的安全性。
此功能支援最高 AES 256 位元的多個加密演算法。 如此可提供您選項,選取符合您需求的演算法。
您可以將加密金鑰與延伸金鑰管理 (EKM) 提供者整合。
好!來捲開衣袖動手實作!
首先先關閉昨天複習的透明資料加密(TDE)
alter database [SecurityDB]
set encryption off
然後將SecurityDB進行備份,重點是進行加密,這邊我們選擇較高強度的AES256加密演算法。
(因為昨天複習透明資料加密(TDE)時已經在Master Database建立好伺服器憑證了,這邊可以一起使用)
BACKUP DATABASE [SecurityDB]
TO DISK = N'C:\SQL\SecurityDB.bak'
WITH
COMPRESSION,
ENCRYPTION
(
ALGORITHM = AES_256,
SERVER CERTIFICATE = Cert
),
STATS = 10
GO
如果把.bak搬到第二台db去還原,會出現以下錯誤。
沒辦法還原,初步的防護算是成功了,不過有時候有個萬一,真的想到其他資料庫想還原時要如何處理ㄋ?
如果想要第二台資料庫還原資料庫:
首先要備份第一台存放憑證及與保護憑證的private key 。
--備份憑證
USE master;
BACKUP CERTIFICATE cert
TO FILE = N'c:\sql\dbcert.cer'
WITH PRIVATE KEY
(
FILE = N'c:\sql\dbcert.pvk',
ENCRYPTION BY PASSWORD = '1qaz2wsx!'
);
GO
接著到第二台匯入憑證
這一個步驟應該可有可無,如果原本第二台資料庫原本就有Master key,這個步驟可以省略。
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'imMKpassword2';
GO
匯入伺服器憑證到Master DB
USE master;
CREATE CERTIFICATE cert
FROM FILE = 'D:\backup\dbcert.cer'
WITH PRIVATE KEY (FILE = 'D:\backup\dbcert.pvk', DECRYPTION BY PASSWORD = '1qaz2wsx!')
然後重新Restore DB
備份加密
https://msdn.microsoft.com/zh-tw/library/dn449489.aspx
法蘭克福警車
2015.12攝於法蘭克福,Germany