数据加密 第六篇:透明文件加密

对于数据的加密,可以使用证书、对称密钥和非对称密钥,这三种加密机制用于保护数据,SQL Server还提供一种加密功能,透明数据加密(Transparent Data Encryption,TDE),用于对数据库的文件(数据文件和日志文件)进行加密。除了在操作系统层面对文件进行访问控制(权限控制)之外,还要确保服务器被攻击之后文件被窃取的情况。为了避免文件被窃取后通过特权方式获得数据,有必要对文件也进行数据安全加密,即使文件被窃取,如果不能对文件进行解密,那么数据也是安全的。

TDE对数据和日志文件进行实时IO加密和解密。加密过程使用的是数据库加密密钥(Database Encryption Key,DEK),DEK是对称密钥,存储在数据库的启动记录(boot record)中。DEK由证书来保护,该证书存在服务器的主数据库中;DEK也可以由EKM模块保护的非对称密钥来保护。也就是说,如果数据库文件(mdf、ndf、ldf或bak)被窃取,由于没有完整的解密密钥,数据库不可使用。不过如果连master库或者这个服务器证书也一并被窃取,那么还是可以解密的。

TDE在Page级别对数据库文件进行加密,Page在被写入硬盘之前被加密,并在读入内存之前被解密。也就是说,当启用数据库的TDE功能之后,数据和日志会在写入磁盘前被加密,然后在加载到内存时被解密。这个过程对于用户、应用程序都是透明的。

除了透明之外,TDE不会增加加密数据库的大小,加解密之前数据库的大小是相同的。并且对数据库的性能影响较小,TDE对加解密的开销都有很大的调整,相对于很多加密技术而言,性能影响更加小。

一,TDE的层次结构

TDE使用master数据库中的证书来保护DEK,使用DEK来加密和解密数据。

数据加密 第六篇:透明文件加密

启用数据库的TDE:

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘<UseStrongPasswordHere>‘;
go
CREATE CERTIFICATE MyServerCert WITH SUBJECT = ‘My DEK Certificate‘;
go
USE AdventureWorks2012;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2012
SET ENCRYPTION ON;
GO

二,数据库加密密钥

数据库加密密钥(Database Encryption Key,DEK)是对称密钥,由证书(存储在master数据库中)或非对称密钥(存储在EKM中)来保护。在启用TDE之前,必须创建DEK。DEK不能导出,只在当前的系统有效。

CREATE DATABASE ENCRYPTION KEY  
   WITH ALGORITHM = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY }  
   ENCRYPTION BY SERVER   
    {  
        CERTIFICATE Encryptor_Name |  
        ASYMMETRIC KEY Encryptor_Name  
    }

参数注释: WITH ALGORITHM = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY }:指定DEK用于加密数据的算法,从SQL Server 2017开始,除了TRIPLE_DES_3KEY之外,AES_128 | AES_192 | AES_256 都已经过时。

用户可以从 sys.dm_database_encryption_keys 的 字段 encryption_state 查看数据库加密的状态:

0 = No database encryption key present, no encryption
1 = Unencrypted
2 = Encryption in progress
3 = Encrypted
4 = Key change in progress
5 = Decryption in progress
6 = Protection change in progress (The certificate or asymmetric key that is encrypting the database encryption key is being changed.)

三,TDE数据扫描

为了启用数据库的TDE,SQL Server必须做一个加密扫描,把数据文件中的每个页面读入缓冲池,然后把加密后的页面写回磁盘。为了让您更好地控制加密扫描,SQL Server 2019(15.x)引入了TDE扫描,该扫描具有暂停和恢复语法。 您可以在系统的工作负载很重时或在关键业务时间内暂停扫描,然后稍后再恢复扫描。

使用以下语法开始扫描:

ALTER DATABASE <db_name> SET ENCRYPTION ON;

使用以下语法暂停扫描;

ALTER DATABASE <db_name> SET ENCRYPTION SUSPEND;

使用以下语法继续扫描:

ALTER DATABASE <db_name> SET ENCRYPTION RESUME;

参考文档:

Transparent Data Encryption (TDE)

相关推荐