在SQL Server 2014(12.x)版本中,在BACKUP DATABASE的參數(shù)中增加了ENCRYPTION參數(shù),即備份時(shí),對(duì)寫入文件的數(shù)據(jù)進(jìn)行加密。那么該參數(shù)是如何使用的呢?WITH ENCRYPTION 加密對(duì)性能有怎樣的影響?其和TDE有怎樣的關(guān)系,兩者對(duì)性能影響情況如何?本文將通過實(shí)例說明,給出該參數(shù)用法,并與TDE進(jìn)行對(duì)比。
創(chuàng)建測(cè)試環(huán)境
創(chuàng)建數(shù)據(jù)庫test,并在test庫下創(chuàng)建表test,向表中插入一條記錄:
USE master
GO
CREATE DATABASE test ON PRIMARY
(name='test',filename='D:\DB\Test\test.mdf')
LOG ON
(name='test_log',filename='D:\DB\Test\test_log.ldf')
USE test
GO
CREATE TABLE test ( id INT, name VARCHAR(10) )
INSERT? INTO test
VALUES? ( 1, 'Jack' )
要使用WITH ENCRYPTION 參數(shù)備份數(shù)據(jù)庫,和TDE一樣,首先需要?jiǎng)?chuàng)建數(shù)據(jù)庫主秘鑰、服務(wù)器證書,并備份證書:
USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD= 'jC`T?]K,v`{voD<'
CREATE CERTIFICATE TestBackOption
WITH SUBJECT = 'My DEK Certificate for test database backup option'
BACKUP CERTIFICATE TestBackOption
TO FILE ='D:\TestBackOption.cer'
WITH PRIVATE KEY(FILE='D:\TestBackOption_Key.pvk',
ENCRYPTION BY PASSWORD='[J,XJK8|AwE*rLk')
使用ENCRYPTION備份選項(xiàng),在備份時(shí),對(duì)備份文件加密:
BACKUP DATABASE [test]
TO DISK = N'D:\TestWithBackOptionEncryption.bak'
WITH
? COMPRESSION,
? ENCRYPTION?
? (
? ALGORITHM = AES_256,
? SERVER CERTIFICATE = TestBackOption
? ),
? STATS = 10
GO
注意,和TDE不用一樣,需要?jiǎng)?chuàng)建數(shù)據(jù)庫秘鑰,然后在將數(shù)據(jù)庫文件數(shù)據(jù)進(jìn)行加密。使用ENCRYPTION加密備份文件,是在備份時(shí),將數(shù)據(jù)加密后寫入備份文件。
接下來,我們使用記事本打開數(shù)據(jù)庫備份文件,查找“Jack”,我們發(fā)現(xiàn),查不到明文“Jack”,驗(yàn)證確實(shí)達(dá)到了加密的效果。
WITH ENCRYPTION 有兩個(gè)參數(shù),分別是加密算法和加密方式,我們可以選用的加密算法包括:?AES 128、AES 192、AES 256 和 Triple DES;加密方式可以是證書或非對(duì)稱密鑰。
日志備份、文件或文件組備份時(shí)也可以使用ENCRYPTION參數(shù)對(duì)數(shù)據(jù)進(jìn)行加密。
使用TDE加密的數(shù)據(jù)庫,仍然可以使用ENCRYPTION參數(shù)進(jìn)行加密。
備份時(shí)加密的備份文件,還原的時(shí)候和TDE數(shù)據(jù)庫一樣,也需要先在實(shí)例上創(chuàng)建主秘鑰,還原服務(wù)器證書、私鑰,并不需要在還原腳本中增加參數(shù)。
從上文可以看出,相對(duì)TDE,WITH ENCRYPTION數(shù)據(jù)庫備份方式,是在備份時(shí)將數(shù)據(jù)加密后寫入備份文件的,這樣我們可以合理安排備份策略,避開高峰期數(shù)據(jù)讀寫加密、解密對(duì)數(shù)據(jù)庫性能的影響。那么我們是不是就可以棄用TDE了呢?使用數(shù)據(jù)庫備份時(shí)對(duì)文件進(jìn)行加密會(huì)有什么影響嗎?
第一個(gè)問題很好回答,首先,因?yàn)閿?shù)據(jù)庫備份時(shí)對(duì)備份文件進(jìn)行加密是SQL Server 2014(12.x)版本的新功能,SQL Server 2014以前的版本是不能使用的,所以還是不能直接替代的,除非您的組織愿意花費(fèi)成本去將SQL Server升級(jí)到 2014或者更高的版本。其次因?yàn)閿?shù)據(jù)庫中的數(shù)據(jù)是沒有進(jìn)行加密的,線上數(shù)據(jù)更容易被黑客盜取。綜上兩個(gè)原因,TDE仍然是不可替代的。
下面我們將通過試驗(yàn)對(duì)比數(shù)據(jù)庫備份時(shí)對(duì)數(shù)據(jù)庫備份文件進(jìn)行加密和TDE,我們使用《SQL Server 透明數(shù)據(jù)加密(TDE)的影響》一文中test數(shù)據(jù)庫,為了保證數(shù)據(jù)庫數(shù)據(jù)量一致,減少其他因素的影響,我們先使用WITH ENCRYPTION加密選項(xiàng)對(duì)數(shù)據(jù)庫test進(jìn)行備份:
DECLARE @bdatetime AS DATETIME=GETDATE()
SET STATISTICS IO ON
SET? STATISTICS TIME ON
BACKUP DATABASE [test]
TO DISK = N'D:\TestWithBackOptionEncryption.bak'
WITH
? COMPRESSION,
? ENCRYPTION?
? (
? ALGORITHM = AES_256,
? SERVER CERTIFICATE = TestBackOption
? ),
? STATS = 10
SET STATISTICS IO OFF
SET? STATISTICS TIME OFF
SELECT @bdatetime,GETDATE(),DATEDIFF(millisecond,@bdatetime,GETDATE())
GO
已處理百分之 10。
已處理百分之 20。
已處理百分之 30。
已處理百分之 40。
已處理百分之 50。
已處理百分之 60。
已處理百分之 70。
已處理百分之 80。
已處理百分之 90。
已為數(shù)據(jù)庫 'test',文件 'test' (位于文件 1 上)處理了 328592 頁。
已處理百分之 100。
已為數(shù)據(jù)庫 'test',文件 'test_log' (位于文件 1 上)處理了 3 頁。
BACKUP DATABASE 成功處理了 328595 頁,花費(fèi) 62.830 秒(40.858 MB/秒)。
?SQL Server 執(zhí)行時(shí)間:
? ?CPU 時(shí)間 = 265 毫秒,占用時(shí)間 = 63160 毫秒。
?SQL Server 執(zhí)行時(shí)間:
? ?CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
(1 行受影響)
對(duì)test庫啟動(dòng)TDE
加密算法和數(shù)據(jù)庫備份選項(xiàng)中的加密算法一樣,均使用AES_256
USE test
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM= AES_256
ENCRYPTION BY SERVER CERTIFICATE TestBackOption
ALTER DATABASE test SET ENCRYPTION ON
查看動(dòng)態(tài)視圖?sys.dm_database_encryption_keys?中的列percent_complete?,確認(rèn)其重新變?yōu)?后,說明加密完成:
SELECT? DB_NAME(database_id) DBName, percent_complete
FROM? ? sys.dm_database_encryption_keys
接下來我們來備份TDE數(shù)據(jù)庫:
USE test
GO
DECLARE @bdatetime AS DATETIME=GETDATE()
SET STATISTICS IO ON
SET? STATISTICS TIME ON
BACKUP DATABASE [test]
TO DISK = N'D:\Test_TDE.bak'
WITH? ? STATS = 10
SET STATISTICS IO OFF
SET? STATISTICS TIME OFF
SELECT @bdatetime,GETDATE(),DATEDIFF(millisecond,@bdatetime,GETDATE())
GO
已處理百分之 10。
已處理百分之 20。
已處理百分之 30。
已處理百分之 40。
已處理百分之 50。
已處理百分之 60。
已處理百分之 70。
已處理百分之 80。
已處理百分之 90。
已為數(shù)據(jù)庫 'test',文件 'test' (位于文件 1 上)處理了 328544 頁。
已處理百分之 100。
已為數(shù)據(jù)庫 'test',文件 'test_log' (位于文件 1 上)處理了 3 頁。
BACKUP DATABASE 成功處理了 328547 頁,花費(fèi) 138.508 秒(18.531 MB/秒)。
?SQL Server 執(zhí)行時(shí)間:
?? CPU 時(shí)間 = 157 毫秒,占用時(shí)間 = 138843 毫秒。
?SQL Server 執(zhí)行時(shí)間:
?? CPU 時(shí)間 = 0 毫秒,占用時(shí)間 = 0 毫秒。
完成時(shí)間: 2020-02-26T14:04:50.9311361+08:00
可以看到TDE數(shù)據(jù)庫備份消耗的時(shí)間是備份時(shí)加密備份文件消耗時(shí)間的1倍左右,而兩者CPU消耗時(shí)間近乎一致,因?yàn)門DE數(shù)據(jù)庫的備份是先加密后解密的過程。
結(jié)合《SQL Server 透明數(shù)據(jù)加密(TDE)的影響》,如果您已經(jīng)在使用SQL Server 2014(12.x)或者更高版本的SQL Server 數(shù)據(jù)庫,并且您已經(jīng)使用其他安全措施,保證數(shù)據(jù)庫數(shù)據(jù)的安全??梢钥紤]使用備份時(shí)對(duì)備份文件加密,即使用的備份的參數(shù):
ENCRYPTION?
? (
? ALGORITHM = AES_256,
? SERVER CERTIFICATE = TestBackOption
? )
注意:但TDE是不可替代的,因?yàn)閭浞輹r(shí)對(duì)備份文件加密,存在的安全隱患,即生產(chǎn)環(huán)境數(shù)據(jù)庫文件是沒有加密的,此數(shù)據(jù)庫文件被竊,或者被未授權(quán)的用戶訪問,或者被黑客攻擊,仍然會(huì)暴露組織的隱私數(shù)據(jù)。
————————————————
版權(quán)聲明:本文為CSDN博主「三空道人」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhoujunah/article/details/105946752