合 MSSQL中的透明数据加密 (TDE)介绍
Tags: MSSQLSQL Server整理自官网透明数据加密 (TDE)
加密简介
加密是指通过使用密钥或密码对数据进行模糊处理的过程。 如果没有相应的解密密钥或密码,此过程会使数据变得毫无用处。 加密并不解决访问控制问题。 不过,它可以通过限制数据丢失来增强安全性,即使在访问控制失效的情况下。 例如,如果数据库主计算机配置有误且黑客获取了敏感数据,那么被盗信息如已加密就可能毫无用处。
虽然加密是可帮助确保安全性的有力工具,但其并不适用于所有数据或连接。 决定是否实施加密时,请考虑用户访问数据的方式。 如果用户通过公共网络访问数据,则可能需要使用数据加密以增强安全性。 但是,如果所有访问都具有某项安全 Intranet 配置,则可能不需要使用加密。 任何时候使用加密时还应包括密码、密钥和证书的维护策略。
选择加密算法
加密是希望保护 SQL Server 实例安全的管理员可以采用的多种防御方法之一。
加密算法定义了未经授权的用户无法轻松逆转的数据转换。 管理员和开发人员可以从 SQL Server 的多种算法中选择,包括 DES、三重 DES、TRIPLE_DES_3KEY、RC2、RC4、128 位 RC4、DESX、128 位 AES、192 位 AES 和 256 位 AES。
从 SQL Server 2016 (13.x) 开始,除 AES_128
、AES_192
和 AES_256
以外的所有算法都已弃用。 若要使用旧算法(不推荐),必须将数据库的数据库兼容级别设置为 120 或更低。
TDE简介
透明数据加密 (TDE) 可以加密 SQL Server、Azure SQL 数据库和 Azure Synapse Analytics 数据文件。 这种加密方式称为静态数据加密。
为了帮助保护用户数据库的安全,可以采取以下预防措施:
- 设计安全的系统。
- 对机密资产加密。
- 在数据库服务器外围构建防火墙。
但恶意方如果窃取了硬盘或备份磁带等物理介质,就可以还原或附加数据库并浏览其数据。
一种解决方案是加密数据库中的敏感数据,并使用证书保护用于加密数据的密钥。 此解决方案可以防止没有密钥的人使用这些数据。 但必须提前规划好此类保护。
TDE 对数据和日志文件进行实时 I/O 加密和解密。 加密使用的是数据库加密密钥 (DEK)。 数据库启动记录存储该密钥,供还原时使用。 DEK 是对称密钥,由服务器的 master
数据库存储的证书或 EKM 模块所保护的非对称密钥提供保护。
TDE 保护静态数据,也就是数据和日志文件。 它让你可以遵循许多法律、法规和各个行业建立的准则。 借助此功能,软件开发人员可以使用 AES 和 3DES 加密算法来加密数据,且无需更改现有的应用程序。
备注
TDE 不适用于系统数据库。 不能用于加密 master
、model
或 msdb
。 tempdb
启用 TDE 但无法直接加密的用户数据库时,会自动加密。
TDE 不提供跨信道加密。 若要详细了解如何跨信道加密数据,请参阅配置 SQL Server 数据库引擎以加密连接。
相关主题:
- Azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics 的透明数据加密
- Azure Synapse Analytics 中的透明数据加密 (TDE) 入门
- 将受 TDE 保护的数据库移到其他 SQL Server
- 使用 EKM 在 SQL Server 上启用 TDE
- 使用具有 SQL 加密功能的 SQL Server 连接器
- 有关 TDE 的常见问题解答的 SQL Server 安全博客
关于 TDE
数据库文件加密在页面级执行。 已加密数据库中的页在写入磁盘之前会进行加密,在读入内存时会进行解密。 TDE 不会增加已加密数据库的大小。
适用于 SQL 数据库的信息
将 TDE 与 Azure SQL 数据库一起使用时, SQL 数据库将自动为你创建存储在 master
数据库中的服务器级别证书。 若要在 SQL 数据库上移动 TDE 数据库,无需为移动操作解密数据库。 有关将 TDE 与 SQL 数据库一起使用的详细信息,请参阅 Azure SQL 数据库的透明数据加密。
适用于 SQL Server 的信息
保证数据库的安全后,可以使用正确的证书来还原数据库。 有关证书的详细信息,请参阅 SQL Server Certificates and Asymmetric Keys。
启用 TDE 后,立即备份证书及其关联的私钥。 如果证书不可用,或者如果在另一台服务器上还原或附加数据库,则需要备份证书和私钥。 否则,将无法打开数据库。 还应备份存储在“包含的系统数据库”中的证书。
即使你在数据库上禁用了 TDE,也要保留加密证书。 虽然数据库未加密,但事务日志的某些部分仍可能受到保护。 在执行完整的数据库备份之前,某些操作可能还需要使用证书。
你仍可使用超过过期日期的证书来通过 TDE 加密和解密数据。
加密层次结构
Windows 数据保护 API (DPAPI) 位于加密树的根目录中,在计算机级别保护密钥层次结构,并用于保护数据库服务器实例的服务主密钥 (SMK) 。 SMK 保护存储在用户数据库级别的数据库主密钥 (DMK),并保护证书和非对称密钥。 这些密钥反过来又保护对称密钥,进而保护数据。 TDE 使用与证书类似的层次结构。 使用 TDE 时,DMK 和证书必须存储在 master
数据库中。 仅用于 TDE 且称为数据库加密密钥 (DEK) 的新密钥将在用户数据库中创建和存储。
下图显示了 TDE 加密体系结构。 在 SQL 数据库上使用 TDE 时,用户仅能配置数据库级项目(数据库加密密钥和 ALTER DATABASE
部分)。
启用 TDE
若要使用 TDE,请按以下步骤操作。
适用于: SQL Server。
- 创建主密钥。
- 创建或获取由主密钥保护的证书。
- 创建数据库加密密钥并使用此证书保护该密钥。
- 将数据库设置为使用加密。
下面的示例演示如何使用安装在服务器上的 MyServerCert
证书来加密和解密 AdventureWorks2022
数据库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | USE master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>'; GO CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate'; GO USE AdventureWorks2022; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE MyServerCert; GO ALTER DATABASE AdventureWorks2022 SET ENCRYPTION ON; GO |
加密和解密操作由 SQL Server 安排在后台线程中执行。 若要查看这些操作的状态,可以使用本文后面部分显示的表中的目录视图和动态管理视图。
注意
启用了 TDE 的数据库备份文件也使用 DEK 进行加密。 因此,在还原这些备份时,用于保护 DEK 的证书必须可用。 因此,除了备份数据库之外,一定要注意维护好服务器证书的备份。 如果证书不再可用,就会造成数据丢失。
有关详细信息,请参阅 SQL Server Certificates and Asymmetric Keys。
查询是否启用了TDE加密
1 | select d.name,d.database_id,d.is_encrypted from sys.databases d; |
命令和函数
对于接受 TDE 证书的以下语句,请使用数据库主密钥对其加密。 如果只用密码加密,这些语句将拒绝将它们视为加密程序。
重要
如果在 TDE 使用证书后将证书设置为密码保护,那么数据库在重启后将无法访问。
下表提供了 TDE 命令和函数的链接和说明:
展开表
命令或函数 | 目的 |
---|---|
CREATE DATABASE ENCRYPTION KEY | 创建用于加密数据库的密钥 |
ALTER DATABASE ENCRYPTION KEY | 更改用于加密数据库的密钥 |
DROP DATABASE ENCRYPTION KEY | 删除用于加密数据库的密钥 |
ALTER DATABASE SET 选项 | 介绍用来启用 TDE 的 ALTER DATABASE 选项 |
目录视图和动态管理视图
下表显示了 TDE 目录视图和动态管理视图 (DMV)。
展开表
目录视图或动态管理视图 | 目的 |
---|---|
sys.databases | 显示数据库信息的目录视图 |
sys.certificates | 用于显示数据库中的证书的目录视图 |
sys.dm_database_encryption_keys | 用于提供有关数据库加密密钥的信息以及加密状态的动态管理视图。 |
权限
如上表中所述,TDE 的每项功能和每个命令都有各自的权限要求。
查看 TDE 所涉及的元数据要求拥有对证书的 VIEW DEFINITION 权限。
注意事项
当进行数据库加密操作的重新加密扫描时,将禁用对数据库的维护操作。 可以使用数据库的单用户模式设置来执行维护操作。 有关更多信息,请参阅“将数据库设置为单用户模式”。
使用 sys.dm_database_encryption_keys
动态管理视图来查找数据库加密状态。 有关更多信息,请参阅本文前面的“目录视图和动态管理视图”部分。
在 TDE 过程中,数据库中的所有文件和文件组都进行加密。 如果将数据库中的任何文件组标记为 READ ONLY
,数据库加密操作将会失败。
如果在数据库镜像或日志发送中使用数据库,则两个数据库都将进行加密。 日志事务在它们之间发送时,都是加密的。
重要
当数据库设置为加密时,将加密全文检索。 在 SQL Server 2005 (9.x) 及更早版本中创建的这些索引由 SQL Server 2008 (10.0.x) 及更高版本导入数据库,并由 TDE 加密。
提示
要监视数据库的 TDE 状态更改,请使用 SQL Server 审核或 Azure SQL 数据库审核。 对于 SQL Server,在审核操作组 DATABASE_OBJECT_CHANGE_GROUP
下跟踪 TDE,可在 SQL Server 审核操作组和操作中找到该组。
TDE限制
在初始数据库加密、密钥更改或数据库解密期间,不允许执行下列操作:
- 从数据库中的文件组中删除文件
- 删除数据库
- 使数据库脱机
- 分离数据库
- 将数据库或文件组转换为
READ ONLY
状态
以下操作在 CREATE DATABASE ENCRYPTION KEY
、ALTER DATABASE ENCRYPTION KEY
、DROP DATABASE ENCRYPTION KEY
和 ALTER DATABASE...SET ENCRYPTION
语句中是不允许的: