SQL Server 中检查器工作空间的透明数据加密 (TDE)

可采取多种预防措施来协助保护数据库安全,例如设计安全系统、加密机密资产以及在数据库服务器周围建立防火墙。但如果物理介质(如驱动器或备份磁带)被盗,则恶意方可以恢复或附加数据库并浏览数据。一种解决方案是对数据库中的敏感数据进行加密,并通过一个证书来保护用于加密数据的密钥。这样便可防止任何没有密钥的用户使用该数据,但此种保护必须提前计划。

透明数据加密 (TDE) 可用于加密敏感数据,例如存储在表和文件组中的信用卡号。加密数据将为能够访问数据的数据库用户或应用程序进行透明解密。TED 有助于在存储介质或数据文件被盗的情况下保护介质中存储的数据。SQL Server 使用验证、授权和审计机制来保护数据库中数据的安全,但不能保护用于存储数据的操作系统数据文件中数据的安全。为保护这些数据文件,SQL Server 提供了 TDE。TDE 可加密数据文件中存储的敏感数据。为防止发生未经授权的解密,TDE 将加密密钥存储在数据库以外的安全模块中。

TDE 执行数据和日志文件的实时 I/O 加密与解密。此加密使用数据库加密密钥 (DEK),该密钥存储在数据库启动记录中以供恢复期间使用。DEK 是通过使用存储在服务器主数据库中的证书进行保护的对称密钥,或者是通过 EKM 模块进行保护的不对称密钥。TDE 可以保护静止的数据,即数据和日志文件。它可用于遵守各行业中建立的多种法律、法规和准则。从而使软件开发者能够使用 AES 和 3DES 加密算法对数据进行加密,而无需更改现有应用程序。

数据库文件的加密是在页面级别执行的。已加密数据库中的页面将在写入磁盘之前进行加密,并在读取到内存时进行解密。TDE 不会增加已加密数据库的大小。

使用 TDE 的优势在于:

有关详细信息,请参阅 MSDN 库中的透明数据加密 (TDE)

要使用 TDE,请在 SQL Server Management Studio 中执行以下步骤。

步骤:
  1. 创建主密钥。
  2. 创建或获取受主密钥保护的证书。
  3. 创建数据库加密密钥并通过证书对其进行保护。
  4. 将数据库设置为使用加密。

TDE 示例

您可使用以下 SQL 命令来配置 TDE。您可选择使用密码作为主密钥,备份主密钥时,可选择文件夹和文件名。

注注:

对示例进行复制和粘贴可能会导致语法错误。

USE master
GO
/* Verify master key */
SELECT * FROM sys.symmetric_keys WHERE name LIKE '%MS_DatabaseMasterKey%'
GO

/* if there are no records found, then it means there was no predefined Master Key. 
 To create a Master Key, you can execute the below mentioned TSQL code. */
 
/* Create master key */
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'rev$$@admin';
GO
/* Backup master key */
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'rev$$@admin';
GO
BACKUP MASTER KEY TO FILE = 'D:\mssqlbackup\master\masterkey.mk' 
    ENCRYPTION BY PASSWORD = 'rev$$@admin';
GO

/* Create Certificate */
CREATE CERTIFICATE rev_cert WITH SUBJECT = 'REV Server Certificate';
GO

/* Verify Certificate */
SELECT * FROM sys.certificates where [name] = 'rev_cert'
GO

/* Backup certificate */
BACKUP CERTIFICATE rev_cert TO FILE = 'D:\mssqlbackup\master\rev.cer'
   WITH PRIVATE KEY (
         FILE = 'D:\mssqlbackup\master\rev.pvk',
         ENCRYPTION BY PASSWORD = 'rev$$@admin');
GO

--use rev database
USE rev
GO
/* Create Encryption key */
CREATE DATABASE ENCRYPTION KEY
   WITH ALGORITHM = AES_256
   ENCRYPTION BY SERVER CERTIFICATE rev_cert;
GO

/* Encrypt database */
ALTER DATABASE revdb SET ENCRYPTION ON;
GO

/* Verify Encryption */
SELECT 
DB_NAME(database_id) AS DatabaseName
,Encryption_State AS EncryptionState
,key_algorithm AS Algorithm
,key_length AS KeyLength
FROM sys.dm_database_encryption_keys
GO
SELECT 
NAME AS DatabaseName
,IS_ENCRYPTED AS IsEncrypted 
FROM sys.databases where name ='revdb'
GO
9/9/2014