DBAtlas · 数据库运维图谱

配置 TDE:主密钥、证书、证书备份和加密进度

SQL Server安全

命令

USE master;
IF NOT EXISTS (SELECT 1 FROM sys.symmetric_keys WHERE name = N'##MS_DatabaseMasterKey##')
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'<GucluParola_1>';
CREATE CERTIFICATE [TDE_Cert_2026]
    WITH SUBJECT = N'TDE certificate', EXPIRY_DATE = '20361231';

-- Back it up NOW: without cert + private key the backups cannot be restored anywhere
BACKUP CERTIFICATE [TDE_Cert_2026]
    TO FILE = N'D:\Keys\TDE_Cert_2026.cer'
    WITH PRIVATE KEY (FILE = N'D:\Keys\TDE_Cert_2026.pvk',
                      ENCRYPTION BY PASSWORD = N'<GucluParola_2>');

USE [Musteri];
CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER CERTIFICATE [TDE_Cert_2026];
ALTER DATABASE [Musteri] SET ENCRYPTION ON;

-- Progress and certificate backup date:
SELECT DB_NAME(dek.database_id) AS db, dek.encryption_state_desc, dek.percent_complete,
       dek.encryption_scan_state_desc, c.name AS cert_name, c.expiry_date, c.pvt_key_last_backup_date
FROM   sys.dm_database_encryption_keys dek
  LEFT JOIN master.sys.certificates c ON c.thumbprint = dek.encryptor_thumbprint;

-- On the target server (before restore / AG secondary):
-- CREATE CERTIFICATE [TDE_Cert_2026] FROM FILE = N'D:\Keys\TDE_Cert_2026.cer'
--   WITH PRIVATE KEY (FILE = N'D:\Keys\TDE_Cert_2026.pvk', DECRYPTION BY PASSWORD = N'<GucluParola_2>');

作用

在 master 中创建数据库主密钥和证书,连同私钥备份证书,创建 AES-256 数据库加密密钥,并对静态数据文件和日志文件加密;显示后台加密扫描的进度。

适用场景

用于 GDPR/PCI 等静态数据加密要求,以及防范备份文件和 MDF/LDF 文件被盗。

注意

若证书 + 私钥备份或其密码丢失,TDE 数据库及其所有备份将永久无法读取;把备份存放在远离服务器的安全保管库中。在任何数据库上启用 TDE 都会同时加密 tempdb(全服务器范围的少量 CPU 开销)。加密扫描 I/O 很重;在 2019+ 上可用 ALTER DATABASE ... SET ENCRYPTION SUSPEND/RESUME 暂停。对于 AG/日志传送,必须先在每台目标服务器上安装证书。TDE 不加密内存中或网络上的数据。

在 DBAtlas 中打开 →

相关内容