# SQL Server 透明資料加密(TDE) 透明資料加密(TDE)是 SQL Server 中的一項功能,用於對資料庫中的數據進行加密。TDE 通過對數據庫的物理文件進行加密,保護數據在儲存時的安全性。當 TDE 啟用後,數據在寫入磁盤之前會被自動加密,在讀取時自動解密。TDE 使用對稱金鑰進行加解密,該金鑰由主要密鑰保護。TDE 提供強大的數據保護,確保數據在儲存和傳輸過程中的機密性。 在早年這功能要用 SQL Enterprise 才能使用此功能,SQL 2019 後這功能下放到 Standard 版了。 ## 現有資料庫啟用 TDE 步驟 ### 啟用金鑰與建立憑證 ```SQL USE master; GO --創建主要金鑰(那個密碼不要忘掉) CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TDE@0123456789'; GO --創建加密憑證 CREATE CERTIFICATE TdeServerCert WITH SUBJECT = N'透明加密憑證'; GO ``` ### 啟用資料庫TDE功能 ```SQL USE 目標資料庫; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE TdeServerCert; GO ALTER DATABASE 目標資料庫 SET ENCRYPTION ON; GO ``` ## 啟用 TDE 後 資料庫的備份與移轉 啟用TDE後,資料庫的 .mdf .ldf .bak 等檔案都是受到保護的,直接拿到別臺主機是不能還原與使用的,需要先把原主機上的憑證備份遷移過去。才能還原 bak 或掛載 .mdf .ldf。 ### 備份憑證(在原主機執行) ```SQL BACKUP CERTIFICATE TdeServerCert TO FILE = '/var/MsSqlBackUp/TdeServerCert.bak' WITH PRIVATE KEY ( FILE = '/var/MsSqlBackUp/TdeServerCertKey.pvk', ENCRYPTION BY PASSWORD = 'TDE@9876543210' ); ``` ### 還原憑證(在新主機執行) ```SQL USE master; GO --創建主要金鑰(那個密碼不要忘掉,這邊的主要金鑰可以直接建立新的不需要從原主機備份過來) CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'NEWTDE@0123456789'; GO --還原 TDE 使用憑證.(TdeServerCert.bak TdeServerCertKey.pvk 從原主機備份下來的) CREATE CERTIFICATE TdeServerCert FROM FILE = '/var/MsSqlBackUp/TdeServerCert.bak' WITH PRIVATE KEY ( FILE = '/var/MsSqlBackUp/TdeServerCertKey.pvk', DECRYPTION BY PASSWORD = 'TDE@9876543210' ); --還原資料庫 USE [master] RESTORE DATABASE [目標資料庫] FROM DISK = N'/var/MsSqlBackUp/目標資料庫.bak' WITH FILE = 1, MOVE N'EPB_CEMS' TO N'/var/opt/mssql/user/data/目標資料庫.mdf', MOVE N'EPB_CEMS_log' TO N'/var/opt/mssql/user/data/目標資料庫.ldf', NOUNLOAD, STATS = 5 GO ``` ## 其他作業參考 ### 主要金鑰操作 ```SQL --備份主要金鑰 BACKUP MASTER KEY TO FILE = '/var/MsSqlBackUp/MasterKey.bak' ENCRYPTION BY PASSWORD = 'TDE@9876543210'; /*這邊的密碼是 .bak 檔的密碼,跟原本 CREATE 無關*/ --還原主要金鑰 RESTORE MASTER KEY FROM FILE = '/var/MsSqlBackUp/MasterKey.bak' DECRYPTION BY PASSWORD = 'TDE@9876543210' /*這邊的密碼是 .bak 檔的密碼*/ ENCRYPTION BY PASSWORD = 'TDE@0123456789'; /*這個是日後如果要 OPEN MASTER KEY 時需要用到的密碼*/ --開啟主要金鑰(還原後預設狀態是 CLOSE 的,這時候需要先 OPEN 才能使用,OPEN 的時候需要當初設定的密碼) OPEN MASTER KEY DECRYPTION BY PASSWORD = 'TDE@0123456789'; --關閉主要金鑰,關閉後 TDE 資料庫還是可以操作,但無法在創建的憑證 CLOSE MASTER KEY; --刪除主要金鑰,當金鑰還被某些憑證使用時基本也是刪不掉的 DROP MASTER KEY; --查詢目前主要金鑰的設定狀況 SELECT name, is_master_key_encrypted_by_server FROM sys.databases --- ``` ### 憑證操作參考 ```SQL -- 查詢目前資料庫中已經有哪些憑證 SELECT * FROM sys.certificates -- 刪除憑證(當憑證被作用於某個TDE資料庫時,是刪不掉的) DROP CERTIFICATE TdeServerCert; ``` ### 查詢目前TDE處理的進度 ```SQL select DB_NAME(database_id) , encryption_state_desc, encryption_scan_state_desc, encryption_scan_modify_date, percent_complete from sys.dm_database_encryption_keys ``` ### TDE憑證更新 ```SQL --建立新的憑證 USE [master] GO CREATE CERTIFICATE NewTDECert WITH SUBJECT = 'New TDE DEK Certificate', EXPIRY_DATE = '20181231'; GO --抽換目前使用的憑證 USE [目標資料庫] GO ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER CERTIFICATE NewTDECert; GO ``` ## 補充說明 啟用 TDE 後幾個重要的東西要備份好,搞丟了光拿到資料庫備份檔也無法使用還原使用。 * MASTER KEY 的密碼 * 備份下來的憑證(有兩個檔案一個憑證一個私鑰) * 備份憑證用的密碼 ## 網路參考資料 * [透明資料加密 (TDE)](https://learn.microsoft.com/zh-tw/sql/relational-databases/security/encryption/transparent-data-encryption?view=sql-server-ver16) * [SQL Server 利用透明資料加密(TDE)對整個資料庫加密](https://dotblogs.com.tw/shadow/2018/03/02/194645) * [[SQL SERVER]瞭解透明資料加密 (TDE)#實做](https://medium.com/ricos-note/sql-server-%E7%9E%AD%E8%A7%A3%E9%80%8F%E6%98%8E%E8%B3%87%E6%96%99%E5%8A%A0%E5%AF%86-tde-%E5%AF%A6%E5%81%9A-a80e0637b904) * [Updating an expired SQL Server TDE certificate ](https://www.mssqltips.com/sqlservertip/5009/updating-an-expired-sql-server-tde-certificate/)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.