什么是TDE加密?
TDE(Transparent Data Encryption)即透明数据加密,是SQL Server Enterprise版本中提供的一项安全性扩展功能,可以为整个数据库提供加密保护,使之保存在磁盘上的数据不会因为外部攻击而被窃取到敏感信息,可以避免数据信息的泄露、滥用等安全风险。
TDE加密技术是一种基于I/O传输的技术方式,当数据写入数据库或从数据库中读取数据时,数据会自动进行加密和解密过程,并对外提供未加密的视图,实现数据无缝加密,不影响应用程序对数据库的访问。
因为TDE加密是对整个数据库进行加密,所以在使用TDE加密保护数据时,要应用在整个数据库层次,而不是在某个表、行、列的层次上。
为什么要使用TDE加密?
由于MySQL并不是默认开启加密的,当我们应用程序里面存在多种敏感信息时,F5、SQL注入、恶意代码等方式均有可能使数据泄露。而TDE加密作为一种防范敏感信息泄露的手段,可以使数据库数据在写入到磁盘上时就被加密,而在读取数据时,数据会自动进行解密,即使数据被窃取到,获得的只是密文。
另外,TDE加密最大的优点是它可以对现有的应用程序透明化,不需修改应用程序也可以轻松实现数据加密,而且它与SQL Server的其它安全机制完美契合。
如何启用TDE加密?
第一步,准备环境
在启用TDE之前,请先确保以下条件已经满足:
运行的是SQL Server Enterprise版本,已经开启了数据库加密功能。
SQL Server服务使用的是Windows账户,在本条款下的RESTRICTED USER授予了大量权限。
密钥管理托管服务(KMSP)已经启用,证书和私钥已经经过合适的安全保护,然后将它们导入到SQL Server。
第二步,创建数据库加密密钥
要使用TDE加密,首先需要使用CREATE DATABASE ENCRYPTION KEY语句创建数据库加密密钥,密钥可以采用自已生成的证书,或者使用服务端生成的证书。注意:必须备份数据库加密密钥,如下:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'myStrongPassword';
CREATE CERTIFICATE TDECertificate WITH SUBJECT = 'TDE Certificate';
BACKUP CERTIFICATE TDECertificate TO FILE = 'C:\Backup\TDECertificate.cer' WITH PRIVATE KEY ( FILE = 'C:\Backup\TDECertificate.pvk', ENCRYPTION BY PASSWORD = 'EncryptionPassword' );
第三步,启用TDE加密
在创建了数据库加密密钥之后,使用ALTER DATABASE语句启用加密,如下:
USE master;
GO
CREATE DATABASE TDETest;
GO
USE TDETest
CREATE TABLE TDETable1 ( FirstName VARCHAR(50), LastName VARCHAR(50) );
GO
ALTER DATABASE TDETest SET ENCRYPTION ON;
GO
第四步,验证TDE加密是否成功
在启用加密之后,可以在OBJECT例如表或列上进行检索,并且通过sys.dm_database_encryption_keys函数查看加密状态,如下:
USE TDETest;
--查询表TDETable1在物理存储上是否加密成功
SELECT * FROM TDETable1;
--查询TDETest的加密状态
EXEC sys.dm_database_encryption_keys;
注意: 当数据库加密未完成,状态可能为“未加密”的状态(encryption_state描述的是加密完成状态)。当数据库加密完成后,可查看该视图以确保快照验证状态为“与加密属性向兼容”。
TDE加密解密过程分析
使用TDE加密时,写入的数据需要进行加密,而查询的时候需要进行解密。在数据写入数据库时,SQL Server将数据使用加密密钥进行加密并将其写入磁盘。在查询语句中,SQL Server将数据使用相同的加密密钥进行解密,在将其提供给应用程序或服务之前,将数据返回给查询。整个过程都是在后台自动完成,不需要应用程序的任何额外操作。