SQL Server 資料庫TDE加密-速查表

資料庫經過加密後,若遺失加密憑證或金鑰,將無法開啟資料庫,請熟悉操作後再進行,並妥善保存憑證與金鑰

  • TDE / Transparent Data Encryption / 透明資料加密

查詢資料庫加密情形

--在master資料庫,查詢主要金鑰(Master Key)
SELECT	[name],principal_id,symmetric_key_id,
		key_length,key_algorithm,algorithm_desc,[key_guid]
FROM	[master].sys.symmetric_keys

--在master資料庫,查詢有主要金鑰的資料庫
SELECT	is_master_key_encrypted_by_server,is_encrypted,
		[name],database_id,[compatibility_level],collation_name
FROM	[master].sys.databases
-------------------------------------------------
--查詢憑證
SELECT	[name],pvt_key_encryption_type_desc,
		[subject],thumbprint,key_length,certificate_id,
		pvt_key_encryption_type,[expiry_date]
FROM [master].sys.certificates
-------------------------------------------------
--查詢哪些資料庫使用SQL Server加密憑證、加密狀態
SELECT	db_name(database_id) AS [name],encryption_state,
		encryption_state_desc,percent_complete,
		key_algorithm,key_length,encryptor_type,
		encryptor_thumbprint
FROM	[master].sys.dm_database_encryption_keys

加密資料庫(TDE)

--在master資料庫,建立主要金鑰
USE master
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Master*r@4(F&d'
GO
-------------------------------------------------
--切換到master資料庫
--在master資料庫,建立憑證
USE master
CREATE CERTIFICATE FlyStudioX_Certificate
	WITH SUBJECT = '用來保護TDE金鑰的憑證'  
GO
-------------------------------------------------
--切換到需加密的資料庫
--建立資料庫加密金鑰,並使用憑證保護金鑰
USE AdventureWorksLT2019
CREATE DATABASE ENCRYPTION KEY  
	WITH ALGORITHM = AES_256
	ENCRYPTION BY SERVER CERTIFICATE FlyStudioX_Certificate;  
GO

--啟用資料庫加密(TDE)
ALTER DATABASE AdventureWorksLT2019  
	SET ENCRYPTION ON;
GO  
-------------------------------------------------
  • 加密過程中,系統會提醒備份加密憑證
--警告: 用來加密資料庫加密金鑰的憑證尚未備份。
--您應該立即備份此憑證和與此憑證關聯的私密金鑰。
--萬一憑證無法使用時,或者您必須還原資料庫或將它附加到另一部伺服器時,
--就必須有憑證和私密金鑰的備份,否則就無法開啟資料庫。

查詢資料庫主要金鑰

-------------------------------------------------
--在master資料庫,查詢主要金鑰(Master Key)
SELECT	[name],principal_id,symmetric_key_id,
		key_length,key_algorithm,algorithm_desc,[key_guid]
FROM	[master].sys.symmetric_keys

--在master資料庫,查詢有主要金鑰的資料庫
SELECT	is_master_key_encrypted_by_server,is_encrypted,
		[name],database_id,[compatibility_level],collation_name
FROM	[master].sys.databases

建立資料庫主要金鑰

-------------------------------------------------
--在master資料庫,建立主要金鑰
USE master
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Master*r@4(F&d'
GO

查詢資料庫憑證

-------------------------------------------------
--查詢憑證
SELECT	[name],pvt_key_encryption_type_desc,
		[subject],thumbprint,key_length,certificate_id,
		pvt_key_encryption_type,[expiry_date]
FROM [master].sys.certificates
-------------------------------------------------
--查詢哪些資料庫使用SQL Server加密憑證、加密狀態
SELECT	db_name(database_id) AS [name],encryption_state,
		encryption_state_desc,percent_complete,
		key_algorithm,key_length,encryptor_type,
		encryptor_thumbprint
FROM	[master].sys.dm_database_encryption_keys
--FlyStudioX_Certificate	0x1255CB161842A5BDEA1B3B17B82656D9E07E940B

匯出資料庫憑證與金鑰

-------------------------------------------------
--在master資料庫,匯出憑證 & 金鑰 (private key),
--預設路徑為執行個體的DATA資料夾
-- C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\
USE master
BACKUP CERTIFICATE FlyStudioX_Certificate   
	TO FILE = 'C:\Backup\FlyStudioX_Certificate'  
	WITH PRIVATE KEY   
	(  
		FILE = 'C:\Backup\FlyStudioX_PrivateKey',  
		ENCRYPTION BY PASSWORD = 'Private*r@4(F&d'  
	);  
GO

匯入資料庫憑證與金鑰

-------------------------------------------------
--在master資料庫,匯入憑證 & 金鑰 (private key)
--預設路徑為執行個體的DATA資料夾
-- C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\
USE master;
CREATE CERTIFICATE FlyStudioX_Certificate   
	FROM FILE = 'C:\Backup\FlyStudioX_Certificate'  
	WITH PRIVATE KEY   
	(  
		FILE = 'C:\Backup\FlyStudioX_PrivateKey',  
		DECRYPTION BY PASSWORD = 'Private*r@4(F&d'  
	);  
GO

移除資料庫加密

-------------------------------------------------
--切換到master資料庫
--停用資料庫加密(TDE)
USE master;
ALTER DATABASE AdventureWorksLT2019 
	SET ENCRYPTION OFF;
GO
-------------------------------------------------
--切換到需加密的資料庫
--卸除資料庫加密金鑰
USE AdventureWorksLT2019
DROP DATABASE ENCRYPTION KEY
GO
-------------------------------------------------
--切換到master資料庫
--卸除資料庫加密憑證
USE master;
DROP CERTIFICATE FlyStudioX_Certificate;
GO
-------------------------------------------------
--切換到master資料庫
--卸除資料庫主要金鑰
USE master;  
DROP MASTER KEY;  
GO

卸除資料庫加密憑證

如需卸除憑證,務必記得先匯出備份
-------------------------------------------------
--在master資料庫,卸除資料庫加密憑證
USE master;
DROP CERTIFICATE FlyStudioX_Certificate;
GO

卸除資料庫主要金鑰

如需卸除主要金鑰,請確保所有資料庫均已移除加密
USE master;  
DROP MASTER KEY;  
GO