SQL Server WITH ENCRYPTION VS TDE

在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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容