SQLServer Transparent Data Encryption

在現實環境中,我們會遇到數據庫備份磁盤丟失或者被盜的情況,此時惡意破壞方只需還原或者附加數據庫即可瀏覽數據。接下來我將介紹透明數據加密(Transparent Data Encryption)的方法來保護你的數據庫。如果數據A,使用TDE加密之後,即時惡意破壞方有了備份磁盤,也不能還原或者附加,這是因爲數據庫使用了被證書保護的加密數據密鑰。在沒有安裝證書的情況下,通過任何文件(MDF,LDF,bak...)都不是不能還原的.

1.什麼是TDE

透明數據庫加密可對數據和日誌文件執行實時I/O加密和解密.這種加密使用數據庫加密密鑰(Data Encrtyption Key),DEK是使用存儲在服務器的master數據庫中的證書保護的對稱密碼,或者是由EKM模塊保護的非對稱密鑰.使用(Advanced Encryption Standard)或者3DES(Data Encryption Standard)加密算法來加密數據,並且無需更改現有應用程序.

2.如何使用TDE

1.創建主密鑰

2.創建或者獲取由該密鑰保護的證書

3.創建數據庫加密密鑰並且由該證書保護該密鑰

4.將數據庫設置爲可加密

下面通實例對TEST DB進行TDE加密

--Create a master key
USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '~qaz123[]\';
GO
--Create a certificate
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
GO
--Create a database encryption key and protect it by the certificate
USE TEST
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
--Set the database to use encryption
USE TEST
ALTER DATABASE TEST
SET ENCRYPTION ON;
GO

當你完成上面的操作之後,接下來驗證下加密數據的詳細信息

SELECT DB_NAME(database_id) AS DatabaseName, * FROM sys.dm_database_encryption_keys
此時你會發現除了TEST DB 外還有tempdb DB,這是因爲只有你對任一數據庫加密的時候,也會自動的爲tempdb 加密

3.查看TDE是否起作用

在另外一臺Server上面使用bak文件來還原TEST數據庫

RESTORE DATABASE TEST 
FROM DISK = 'E:\數據庫\測試數據庫\TEST.bak'
WITH MOVE 'TEST' TO 'E:\\數據庫\測試數據庫\TEST.mdf',
MOVE 'TEST_log' TO 'E:\數據庫\測試數據庫\TEST.ldf',
NOUNLOAD, REPLACE
執行完上面的代碼之後

Message如下

Msg 33111, Level 16, State 3, Line 1
Cannot find server certificate with thumbprint '0x739E848FD2ECB7D945D39B7836BCD65B55D75D43'.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.


你使用附加數據庫結果也是一樣的,怎麼解決這個問題了,使用添加同樣的證書在這臺Server
在添加該證書到這臺Server之前,先在以前的Server上面備份證書到文件(其實這個操作我在添加證書的時候已經做啦)

代碼如下

--backup certificate nad primary key to file
USE master
GO
BACKUP CERTIFICATE MyServerCert TO FILE = 'D:\Test DB\Test\MyServerCert.cert'
WITH PRIVATE KEY (  
FILE = 'D:\Test DB\Test\MyServerCertPrivate.key',
ENCRYPTION BY PASSWORD = '~qaz123[]\');
GO

備份成功之後,使用備份成功的證書,在目標Server上面創建證書

USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '~qaz123[]\';
GO
USE master
GO
CREATE CERTIFICATE MyServerCert
FROM FILE = 'E:\學習\數據庫\測試數據庫\MyServerCert.cert'
WITH PRIVATE KEY (
FILE = 'E:\學習\數據庫\測試數據庫\MyServerCertPrivate.key'
, DECRYPTION BY PASSWORD = '~qaz123[]\')
GO

創建成功,查詢下證書是否創建成功

SELECT * FROM sys.certificates where name = 'MyServerCert'

現在再次還原數據庫

RESTORE DATABASE TEST 
FROM DISK = 'E:\數據庫\測試數據庫\TEST.bak'
WITH MOVE 'TEST' TO 'E:\\數據庫\測試數據庫\TEST.mdf',
MOVE 'TEST_log' TO 'E:\數據庫\測試數據庫\TEST.ldf',
NOUNLOAD, REPLACE
此時數據庫還原成功,大功告成!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章