對 sql server 數據庫的備份進行加密

嗯,最近在研究數據庫備份相關的東西,考慮到應該爲數據庫備份加個密,就準備從網上搜索一下看看有什麼好辦法,沒想到還挺亂。。。html

首先,我從網上搜到的,對數據庫備份加密的方法,主要有三種:算法

 

一、在使用 BACKUP 語句時,添加 PASSWORD 參數【此方法適用於 sql server 2012 之前的版本(不包含 2012)】sql

不過呢,其實這個 PASSWORD 參數的加密,並非咱們想象中的對數據完整的加密。數據庫

根據 MSDN 中的介紹:https://msdn.microsoft.com/zh-cn/library/ms186865(v=sql.100).aspx服務器

image

貌似此密碼僅僅是給備份附加了一個密碼,並無對備份數據加密,若是該密碼直接被修改替換,備份中的數據仍然能夠被正確的讀取,因此,其實加密的意義不是很大。測試

 

二、對數據庫啓用 透明數據加密(TDE)【此方法適用於 sql server 2008 及之後的版本(含2008)】加密

注:僅 sql server enterprise(企業版)支持此功能。spa

這個TDE吧,嗯,很是的好,由於它不只僅是對備份加密,它是對整個數據庫進行了加密,並且既然是「透明」,也就是說不會影響到任何對數據庫的操做,正常的對數據庫操做(增刪改查什麼的),還有備份恢復什麼的,都不須要特別的考慮加密問題。只有離開了當前的數據庫服務器,就會發現,什麼都作不了。須要在新的服務器中導入原來的加密證書便可正常使用。.net

MSDN 相關文檔:https://msdn.microsoft.com/zh-cn/library/bb934049.aspx日誌

IC715364[1]

 

要啓用透明加密,須要如下幾個步驟:

一、在 master 數據庫中,添加 數據庫主密鑰:

更多:https://msdn.microsoft.com/zh-cn/library/ms174382.aspx

USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '$$test$$';

其中,Password = '' 這裏就是在設置主密鑰,請根據須要設置高強度密碼

修改主密鑰可使用:

更多:https://msdn.microsoft.com/zh-cn/library/ms186937.aspx

use master;
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '$$123123$$';

二、在 master 數據庫中,添加 加密數據庫用的證書:

更多:https://msdn.microsoft.com/zh-cn/library/ms187798(v=sql.120).aspx

USE master;
CREATE CERTIFICATE TestCert WITH SUBJECT = '測試證書';

其中,TestCert 是證書名稱,能夠根據須要隨便起名,可是要記住!Subject 是主題貌似,隨便寫就能夠了,長度最好不要超過128字節。

三、在 要加密的數據庫 中,設置 證書以及加密算法:

更多:https://msdn.microsoft.com/zh-cn/library/bb677241.aspx

USE TestDB
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE TestCert;

其中,TestCert 就是上一步中添加的證書名稱,Algorithm 是加密算法,有:AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY ,請根據須要選擇強度適合的加密算法。

四、對 要加密的數據庫 啓用加密:

ALTER DATABASE TestDB SET ENCRYPTION ON;

嗯,通過以上步驟,對數據庫的加密就完成了。

想要查看當前數據庫服務器中有哪些數據庫已被加密,可執行如下語句:

SELECT DB_NAME(database_id) AS DatabaseName, * FROM sys.dm_database_encryption_keys;

 

不過,還得考慮後續恢復數據庫或者轉移到其它服務器的問題。

五、首先要從 master 數據庫中,備份加密證書:

更多:https://msdn.microsoft.com/zh-cn/library/ms178578.aspx

USE master;
BACKUP CERTIFICATE TestCert TO FILE = 'D:\TestCert.cer'  
WITH PRIVATE KEY ( FILE = 'D:\TestCert.pkey', ENCRYPTION BY PASSWORD = '$$certpwd$$' );

嗯,證書名稱,保存的文件名,同時保存一下私鑰,私鑰的文件名,以及加密私鑰的密碼(此密碼用於保護私鑰,恢復時使用)。

六、在其餘數據庫服務器中,仍然首先創建 數據庫主密鑰,同第1步操做;

七、而後,開始從文件中恢復證書:

USE master;
CREATE CERTIFICATE TestCert FROM FILE = 'D:\TestCert.cer'
WITH PRIVATE KEY ( FILE = 'D:\TestCert.pkey', DECRYPTION BY PASSWORD = '$$certpwd$$');

是的,恢復證書其實就是從文件建立證書,證書名稱、文件路徑、私鑰文件路徑、以及解密私鑰的密碼(備份加密時設置的)。

八、而後你就能夠附加數據庫、恢復數據庫什麼的了~

須要注意的是,數據庫加密的關鍵是 那個證書數據庫主密鑰 是用來保護數據庫信息的,好比證書的存放什麼的,並不直接關係到數據庫的加密。

因此,必定要備份好證書!!!否則別到時候哭着解密不了數據庫。

這個部分的參考文章:http://blog.csdn.net/ws_hgo/article/details/6927152

 

最後呢,說說這個方法的很差,那就是這個方法是對整個數據庫的數據加密,包括日誌什麼的,可能會爲cpu帶來必定的負擔。

並且在備份的時候由於此時數據庫已經處於加密狀態,因此沒法進行太多的壓縮了,可能備份文件體積較大。

其實我比較關心的一點是,這個 透明數據加密(TDE) 只有 Enterprise (企業版)擁有,其它版本是木有的~

image

 

三、直接對備份進行加密【此方法適用於 sql server 2014 及之後的版本(應該?)】

這個方法和第一種比較像,直接在備份時加參數,僅僅對備份加密,不會加密數據庫,可是呢,也須要跟第二種方法同樣,須要先建立證書。

一、算了,要不我就不重複寫了,請看第二種方法的第1步。。。

二、請參見第二種方法的第2步。。。

三、恩恩,此時就能夠開始備份數據庫了!

BACKUP DATABASE TestDB TO DISK ='D:\TestDB.bak' WITH COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = TestCert);

其中,前半句應該很熟悉,就是備份數據庫的語句,Compression 是壓縮選項

後半句就是加密,Algorithm 是加密算法,TestCert 就是咱們添加的證書了。

 

備份就這樣建完了。固然也得涉及到在其它服務器上的恢復問題。

四、好吧,我又懶了,其實就是第二種方法中的第 五、六、7 步,備份證書,恢復證書。。。

五、嗯,又能夠愉快的恢復備份了~

這個部分的參考文章:http://www.cnblogs.com/CareySon/p/3853016.html

 

呵呵,前面說了這麼多,其實直接說這個多好,是吧,首先在版本方面,比TDE多了兩個版本,可是仍是沒有我想要的。。。

其次呢,壓縮也能夠用的上了,不過備份壓縮與備份加密支持的版本是同樣的。。。

image

還有呢,只支持 2014(和之後的版本?),想必如今應該有很多數據庫仍是 2008 甚至 2005。。。

 

總結

因此說呢,其實這幾個方法都不是太滿意。。。你們就根據本身的狀況使用吧,至於我呢。。。根據個人需求,我準備仍是用zip壓縮加密一下吧。。。

哎,浪費了一個上午研究數據庫備份加密,又浪費了一箇中午寫這篇文章,算是一個上午沒白浪費吧,沒準之後用上呢。。。

相關文章
相關標籤/搜索