对 sql server 数据库的备份进行加密
嗯,最近在研究數(shù)據(jù)庫備份相關(guān)的東西,考慮到應(yīng)該為數(shù)據(jù)庫備份加個密,就準(zhǔn)備從網(wǎng)上搜索一下看看有什么好辦法,沒想到還挺亂。。。
首先,我從網(wǎng)上搜到的,對數(shù)據(jù)庫備份加密的方法,主要有三種:
?
1、在使用 BACKUP 語句時,添加 PASSWORD 參數(shù)【此方法適用于 sql server 2012 以前的版本(不包含 2012)】
不過呢,其實這個 PASSWORD 參數(shù)的加密,并不是我們想象中的對數(shù)據(jù)完整的加密。
根據(jù) MSDN 中的介紹:https://msdn.microsoft.com/zh-cn/library/ms186865(v=sql.100).aspx
貌似此密碼僅僅是給備份附加了一個密碼,并沒有對備份數(shù)據(jù)加密,如果該密碼直接被修改替換,備份中的數(shù)據(jù)仍然可以被正確的讀取,所以,其實加密的意義不是很大。
?
2、對數(shù)據(jù)庫啟用 透明數(shù)據(jù)加密(TDE)【此方法適用于 sql server 2008 及以后的版本(含2008)】
注:僅 sql server enterprise(企業(yè)版)支持此功能。
這個TDE吧,嗯,非常的好,因為它不僅僅是對備份加密,它是對整個數(shù)據(jù)庫進(jìn)行了加密,而且既然是“透明”,也就是說不會影響到任何對數(shù)據(jù)庫的操作,正常的對數(shù)據(jù)庫操作(增刪改查什么的),還有備份恢復(fù)什么的,都不需要特別的考慮加密問題。只有離開了當(dāng)前的數(shù)據(jù)庫服務(wù)器,就會發(fā)現(xiàn),什么都做不了。需要在新的服務(wù)器中導(dǎo)入原來的加密證書即可正常使用。
MSDN 相關(guān)文檔:https://msdn.microsoft.com/zh-cn/library/bb934049.aspx
?
要啟用透明加密,需要以下幾個步驟:
1、在 master 數(shù)據(jù)庫中,添加 數(shù)據(jù)庫主密鑰:
更多:https://msdn.microsoft.com/zh-cn/library/ms174382.aspx
USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = '$$test$$';其中,Password = '' 這里就是在設(shè)置主密鑰,請根據(jù)需要設(shè)置高強(qiáng)度密碼。
修改主密鑰可以使用:
更多:https://msdn.microsoft.com/zh-cn/library/ms186937.aspx
use master; ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '$$123123$$';2、在 master 數(shù)據(jù)庫中,添加 加密數(shù)據(jù)庫用的證書:
更多:https://msdn.microsoft.com/zh-cn/library/ms187798(v=sql.120).aspx
USE master; CREATE CERTIFICATE TestCert WITH SUBJECT = '測試證書';其中,TestCert 是證書名稱,可以根據(jù)需要隨便起名,但是要記住!Subject 是主題貌似,隨便寫就可以了,長度最好不要超過128字節(jié)。
3、在 要加密的數(shù)據(jù)庫 中,設(shè)置 證書以及加密算法:
更多: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 ,請根據(jù)需要選擇強(qiáng)度適合的加密算法。
4、對 要加密的數(shù)據(jù)庫 啟用加密:
ALTER DATABASE TestDB SET ENCRYPTION ON;嗯,經(jīng)過以上步驟,對數(shù)據(jù)庫的加密就完成了。
想要查看當(dāng)前數(shù)據(jù)庫服務(wù)器中有哪些數(shù)據(jù)庫已被加密,可執(zhí)行以下語句:
SELECT DB_NAME(database_id) AS DatabaseName, * FROM sys.dm_database_encryption_keys;?
不過,還得考慮后續(xù)恢復(fù)數(shù)據(jù)庫或者轉(zhuǎn)移到其它服務(wù)器的問題。
5、首先要從 master 數(shù)據(jù)庫中,備份加密證書:
更多: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$$' );嗯,證書名稱,保存的文件名,同時保存一下私鑰,私鑰的文件名,以及加密私鑰的密碼(此密碼用于保護(hù)私鑰,恢復(fù)時使用)。
6、在其他數(shù)據(jù)庫服務(wù)器中,仍然首先建立 數(shù)據(jù)庫主密鑰,同第1步操作;
7、然后,開始從文件中恢復(fù)證書:
USE master; CREATE CERTIFICATE TestCert FROM FILE = 'D:\TestCert.cer' WITH PRIVATE KEY ( FILE = 'D:\TestCert.pkey', DECRYPTION BY PASSWORD = '$$certpwd$$');是的,恢復(fù)證書其實就是從文件創(chuàng)建證書,證書名稱、文件路徑、私鑰文件路徑、以及解密私鑰的密碼(備份加密時設(shè)置的)。
8、然后你就可以附加數(shù)據(jù)庫、恢復(fù)數(shù)據(jù)庫什么的了~
需要注意的是,數(shù)據(jù)庫加密的關(guān)鍵是 那個證書,數(shù)據(jù)庫主密鑰 是用來保護(hù)數(shù)據(jù)庫信息的,比如證書的存放什么的,并不直接關(guān)系到數(shù)據(jù)庫的加密。
所以,一定要備份好證書!!!不然別到時候哭著解密不了數(shù)據(jù)庫。
這個部分的參考文章:http://blog.csdn.net/ws_hgo/article/details/6927152
?
最后呢,說說這個方法的不好,那就是這個方法是對整個數(shù)據(jù)庫的數(shù)據(jù)加密,包括日志什么的,可能會為cpu帶來一定的負(fù)擔(dān)。
而且在備份的時候因為此時數(shù)據(jù)庫已經(jīng)處于加密狀態(tài),所以無法進(jìn)行太多的壓縮了,可能備份文件體積較大。
其實我比較關(guān)心的一點是,這個 透明數(shù)據(jù)加密(TDE) 只有 Enterprise (企業(yè)版)擁有,其它版本是木有的~
?
3、直接對備份進(jìn)行加密【此方法適用于 sql server 2014 及以后的版本(應(yīng)該?)】
這個方法和第一種比較像,直接在備份時加參數(shù),僅僅對備份加密,不會加密數(shù)據(jù)庫,但是呢,也需要跟第二種方法一樣,需要先創(chuàng)建證書。
1、算了,要不我就不重復(fù)寫了,請看第二種方法的第1步。。。
2、請參見第二種方法的第2步。。。
3、恩恩,此時就可以開始備份數(shù)據(jù)庫了!
BACKUP DATABASE TestDB TO DISK ='D:\TestDB.bak' WITH COMPRESSION, ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = TestCert);其中,前半句應(yīng)該很熟悉,就是備份數(shù)據(jù)庫的語句,Compression 是壓縮選項
后半句就是加密,Algorithm 是加密算法,TestCert 就是我們添加的證書了。
?
備份就這樣建完了。當(dāng)然也得涉及到在其它服務(wù)器上的恢復(fù)問題。
4、好吧,我又懶了,其實就是第二種方法中的第 5、6、7 步,備份證書,恢復(fù)證書。。。
5、嗯,又可以愉快的恢復(fù)備份了~
這個部分的參考文章:http://www.cnblogs.com/CareySon/p/3853016.html
?
呵呵,前面說了這么多,其實直接說這個多好,是吧,首先在版本方面,比TDE多了兩個版本,但是還是沒有我想要的。。。
其次呢,壓縮也可以用的上了,不過備份壓縮與備份加密支持的版本是一樣的。。。
還有呢,只支持 2014(和以后的版本?),想必現(xiàn)在應(yīng)該有不少數(shù)據(jù)庫還是 2008 甚至 2005。。。
?
總結(jié)
所以說呢,其實這幾個方法都不是太滿意。。。大家就根據(jù)自己的情況使用吧,至于我呢。。。根據(jù)我的需求,我準(zhǔn)備還是用zip壓縮加密一下吧。。。
哎,浪費了一個上午研究數(shù)據(jù)庫備份加密,又浪費了一個中午寫這篇文章,算是一個上午沒白浪費吧,沒準(zhǔn)以后用上呢。。。
轉(zhuǎn)載于:https://www.cnblogs.com/xwgli/p/4522502.html
總結(jié)
以上是生活随笔為你收集整理的对 sql server 数据库的备份进行加密的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “流式”前端构建工具——gulp.js
- 下一篇: SQL注入的原理解说,挺好!