SQL Server 中检查器工作空间的透明数据加密 (TDE)
可采取多种预防措施来协助保护数据库安全,例如设计安全系统、加密机密资产以及在数据库服务器周围建立防火墙。但如果物理介质(如驱动器或备份磁带)被盗,则恶意方可以恢复或附加数据库并浏览数据。一种解决方案是对数据库中的敏感数据进行加密,并通过一个证书来保护用于加密数据的密钥。这样便可防止任何没有密钥的用户使用该数据,但此种保护必须提前计划。
透明数据加密 (TDE) 可用于加密敏感数据,例如存储在表和文件组中的信用卡号。加密数据将为能够访问数据的数据库用户或应用程序进行透明解密。TED 有助于在存储介质或数据文件被盗的情况下保护介质中存储的数据。SQL Server 使用验证、授权和审计机制来保护数据库中数据的安全,但不能保护用于存储数据的操作系统数据文件中数据的安全。为保护这些数据文件,SQL Server 提供了 TDE。TDE 可加密数据文件中存储的敏感数据。为防止发生未经授权的解密,TDE 将加密密钥存储在数据库以外的安全模块中。
TDE 执行数据和日志文件的实时 I/O 加密与解密。此加密使用数据库加密密钥 (DEK),该密钥存储在数据库启动记录中以供恢复期间使用。DEK 是通过使用存储在服务器主数据库中的证书进行保护的对称密钥,或者是通过 EKM 模块进行保护的不对称密钥。TDE 可以保护静止的数据,即数据和日志文件。它可用于遵守各行业中建立的多种法律、法规和准则。从而使软件开发者能够使用 AES 和 3DES 加密算法对数据进行加密,而无需更改现有应用程序。
数据库文件的加密是在页面级别执行的。已加密数据库中的页面将在写入磁盘之前进行加密,并在读取到内存时进行解密。TDE 不会增加已加密数据库的大小。
使用 TDE 的优势在于:
- 安全管理员可在存储介质或数据文件被盗的情况下确保敏感数据的安全。
- 实施 TDE 有助于解决安全相关法规遵从问题。
- 无需创建用于为授权用户或应用程序解密数据的触发器或视图。表中的数据会为数据库用户和应用程序透明解密。
- 数据库用户和应用程序无需了解他们正在访问的数据是以加密形式存储的。数据会为数据库用户和应用程序透明解密。
- 无需为处理加密数据而对应用程序进行修改。数据的加密和解密由数据库管理。
- 密钥管理操作是自动进行的。用户或应用程序无需管理加密密钥。
有关详细信息,请参阅 MSDN 库中的透明数据加密 (TDE)。
要使用 TDE,请在 SQL Server Management Studio 中执行以下步骤。
- 创建主密钥。
- 创建或获取受主密钥保护的证书。
- 创建数据库加密密钥并通过证书对其进行保护。
- 将数据库设置为使用加密。
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