SQL Server 2008数据透明加密的应用
一、前言:
对数据库的保护分为两个方面:
一个是对物理数据库文件的保护:这个通过各类备份方案已经解决;
另一个方面是对数据库内容的访问保护,这个也分两个层次:
一个是利用权限来控制用户如何访问数据文件内容,这个可利用数据库管理工具设定权限,
另一个是如何保护数据物理文件(或备份)被转移到其他数据库从而绕开设定的权限;这个可利用Sql server 2008新增加的数据库透明加密(TDE)功能。
二、数据库透明加密(TDE)的作用:
Microsoft  SQL Server 2008 推出了另一个级别的加密——透明数据加密。
TDE是全数据库级别的加密,它不局限于字段和记录,而是保护数据文件和日志文件的。在一个数据库上的TDE执行对于连接到所选数据库的应用程序来说是非常简单而透明的。它不需要对现有应用程序做任何
改变。这个保护是应用于数据文件和日志文件以及备份文件的。一旦在一个数据库上激活了TDE,备份恢复到另一个SQL Server实例或附加数据文件到另一个SQL Server实例上去将是不允许的,除非用来保护数据库加密密钥(DEK)的证书是可用的。
TDE的加密特性是应用于页面级别的。一旦激活了,页面就会在它们写到磁盘之前加密,在读取到内存之前解密。有一点一定要记住,那就是SQL Server和客户端应用程序之间的通信渠道没有通过TDE来保护和加密。        TDE功能仅在DataCenter和Enterprise版本中提供。
三、TDE的实现过程:
(操作系统的数据保护功能加密)SQL服务主密钥-->(SQL服务主密钥加密)数据库主密钥-->(数据库主密钥加密)数据库证书-->(数据库证书加解密)用户数据库
1、在安装SQL Server时,系统会自动为SQL Server生成一个服务主密钥,该密钥由操作系统的数据保护API(DPAPI)加密保护;
查看该服务主密钥是否存在:
Use Master
SELECT * FROM sys.symmetric_keys
Go
2、手工创建Master级别的数据库主密钥,该主密钥由上面的服务主密钥加密保护;
-- If the master key  is not available, create it.
USE master
GO
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE name LIKE
'%MS_DatabaseMasterKey%')
BEGIN
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'DatabasepA$$w0rd#^'; -- 这个就是数据库的主密钥,由服务主密钥加密保护。
END
GO
-- 清除数据库主密钥Drop MASTER KEY
3、利用上面建立的数据库主密钥,创建Master数据库级别的证书,该证书用来保护用户数据库的加解密密钥;
-- Create the certificate in the master database
USE master;
GO
IF NOT EXISTS (SELECT * ificates WHERE name LIKE '%DEKCertificate%')
BEGIN
CREATE CERTIFICATE DEKCertificate WITH SUBJECT = 'DEK Certificate'
END
GO
-- 清除创建的证书Drop CERTIFICATE DEKCertificate
-- 判断证书是否存在,1--存在;0--不存在:IF NOT EXISTS (SELECT * ificates WHERE name LIKE '%DEKCertificate%') select 1 else select 0
4、创建用户数据库密钥,用上面的证书加密该密钥;
-- Create Database Encryption Key (DEK) in the user database
USE TDE_Test -- 要启用透明加密的用户数据库
GO
IF NOT EXISTS (SELECT * FROM sys.dm_database_encryption_keys WHERE database_id =
DB_ID(' TDE_Test'))
BEGIN
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE DEKCertificate
END
GO
5、启用用户数据库的TDE加密;
-- Check whether the key is created
SELECT DB_NAME(database_id) AS DatabaseName, * FROM sys.dm_database_encryption_keys              -- This should return one row(or more if DEKs have been generated in other databases) with the encryption_state of 1 (1 = unencrypted;3=encrypted).
-- Set the DEK on in the User Database.
ALTER DATABASE TDE_Test
SET ENCRYPTION ON
GO
6、检查用户数据库是否已经启用TDE;
-- Check whether the encryption_state is changed to 3. It should be.
SELECT DB_NAME(database_id) AS DatabaseName, * FROM sys.dm_database_encryption_keys
四、恢复被TDE保护的用户数据库:
被TDE保护的用户数据库是不能直接恢复的另一台SQL Server上的,必须导入原服务器中该用户数据库的证书才有效。
1、导出证书
-- backup the certificate. The private key will be encrypted by the password specified
BACKUP CERTIFICATE DEKCertificate TO FILE = 'E:\'
WITH PRIVATE KEY
(
FILE = 'E:\Instance1PrivateKey.key',
ENCRYPTION BY PASSWORD = ' DatabasepA$$w0rd#^'
)
2、恢复证书到其他SQL Server
-- create the certificate in the second instance by using the backup
-- Private key will be loaded from the saved file.
USE [master]
GO
CREATE CERTIFICATE DEKCertificate FROM FILE = 'E:\'
WITH PRIVATE KEY
(
FILE = 'E:\Instance1PrivateKey.key',
DECRYPTION BY PASSWORD = ' DatabasepA$$w0rd#^'
)
五、TDE的副作用:
1、必须保留证书副本:必须万无一失的保留证书副本,否则一旦需要在其他SQL Server恢复、重建、转移应用了TDE的数据库时,将不会成功。
2、与只读文件组不兼容:如果数据库有只读文件组,那么TDE将会失败。一旦TDE激活了,那么encryption_state的数值将永远不可能是3(加密的)而是2(加密中)。SQL Server在运行TDE代码时不会抛出任何异常。激活TDE之后,如果你打开数据库的属性窗口,你将会发现属性Encryption Enabled的值被设为了true。
3、对Filestream类型的内容无法加密:使用了filestream类型的数据库可以使用TDE来进行加密,但是文件流数据不会被加密。
4、影响事务日志:事务日志一旦TDE激活了,SQL Server通过将文本数据清理出去从而确保日志文件不包含文本数据。SQL Server 从具有加密格式的新VLF开始。sqlserver2008怎么下载
5、影响TempDB的效率:当你在任何数据库上激活了TDE之后这将会自动加密。这会导致使用tempdb 数据库的非加密数据库性能下降。日志传送和数据库镜像如果你在一个传送日志到另一个数据库的数据库(意味着激活了日志传送的数据库)上激活了TDE,那么日志传送操作将会在辅助数据库上失败,除非在辅助服务器上证书可用。
6、压缩备份基本失效:压缩比基本为1:1。
案例:
在激活TDE之前完全备份1,365 KB  激活TDE之后的完全备份  1,365 KB
在激活TDE之前有压缩的完全备份 124KB  激活TDE之后有压缩的完全备份 1,278 KB

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。