SQL Server 2008引入透明数据加密(Transparent Data Encryption),即TDE,它允许你完全无需修改应用程序代码而对整个数据库加密 。当一个用户数据库可用且已启用TDE时,在写入到磁盘时在页级实现加密 。在数据页读入内存时解密 。如果数据库文件或数据库备份被盗,没有用来加密的原始证书将无法访问 。这几乎是SQL Server2008安全选项中最激动人心的功能了,有了它,我们至少可以将一些初级的恶意窥视拒之见外 。
下面的两个例子将展示如何启用和维护透明数据加密 。
示例一、启用透明加密(TDE)
- /********************TDE**************** ****************/
- USE Master
- GO
-
-
-
-
- Create MASTER KEY ENCRYPTION
- BY PASSWORD = B19ACE32-AB68-4589-81AE-010E9092FC6B
- GO
-
- CREATE CERTIFICATE TDE_Server_Certificate
- WITH SUBJECT = Server-level cert for TDE
- GO
-
- USE DB_Encrypt_Demo
- GO
-
- CREATE DATABASE ENCRYPTION KEY
- WITH ALGORITHM = TRIPLE_DES_3KEY
- ENCRYPTION BY SERVER CERTIFICATE TDE_Server_Certificate
- GO
- /*
- Warning: The certificate used for encrypting the database encryption key
- has not been backed up.
- You should immediately back up the certificate and the private key
- associated with the certificate.
- If the certificate ever becomes unavailable or
- if you must restore or attach the database on another server,
- you must have backups of both the certificate and the private key
- or you will not be able to open the database.
- */
-
-
- ALTER DATABASE DB_Encrypt_Demo
- SET ENCRYPTION ON
- GO
-
-
- SELECT is_encrypted
- FROM sys.databases
- WHERE name = DB_Encrypt_Demo

注意:一旦在数据库应用了加密,应该立刻备份服务器级证书!
没有加密DEK的证书,该数据库将无法打开,附加到别的服务器也无法使用,数据库文件亦不会被Hack 。如果一个DBA想要合法地将数据库从一个SQL Server实例移动到另一个SQL Server实例,那么她应该首先备份服务器级证书,然后在新的SQL Server实例中创建证书 。此时可以合法地备份、还原数据库或附加数据及日志文件 。
示例二、管理和移除透明加密(TDE)
- USE DB_Encrypt_Demo
- GO
-
- ALTER DATABASE ENCRYPTION KEY
- REGENERATE WITH ALGORITHM = AES_128
- Go
-
- SELECT DB_NAME(database_id) databasenm,
- CASE encryption_state
- WHEN 0 THEN No encryption
- WHEN 1 THEN Unencrypted
- WHEN 2 THEN Encryption in progress
- WHEN 3 THEN Encrypted
- WHEN 4 THEN Key change in progress
- WHEN 5 THEN Decryption in progress
- END encryption_state,
- key_algorithm,
- key_length
- FROM sys.dm_database_encryption_keys
-
- /*
- 对所有用户数据库的加密处理也包含对tempdb的处理
- databasenm encryption_state key_algorithm key_length
- tempdb Encrypted AES 256
- DB_Encrypt_Demo Encrypted AES 128
- */
注意:对所有用户数据库的加密处理也包含对tempdb的处理

除了更改DEK的算法,我们也可以更改用来加密DEK的服务器级证书(该证书应该定期更改)
- USE master
- GO
- CREATE CERTIFICATE TDE_Server_Certificate_V2
- WITH SUBJECT = Server-level cert for TDE V2
- GO
- USE DB_Encrypt_Demo
- GO
- ALTER DATABASE ENCRYPTION KEY
- ENCRYPTION BY SERVER CERTIFICATE TDE_Server_Certificate_V2
-
-
- ALTER DATABASE DB_Encrypt_Demo
- SET ENCRYPTION OFF
- GO
-
-
- USE DB_Encrypt_Demo
- GO
- Drop DATABASE ENCRYPTION KEY
- Go
-
注意:如果删除DEK是SQL Server实例中最后一个使用TDE的用户定义数据库,在SQL Server实例重启后,tempdb也将变为不加密的状态 。
小结:
1、本文主要介绍透明数据加密(TDE)的使用 。
2、对DEK的修改同时影响到tempdb数据库的加密状态 。
SQL Server安全系列至此暂告一段落 。谢谢各位耐心看完,欢迎对邀月提出指正 。
原文链接:http://www.cnblogs.com/downmoon/archive/2011/03/17/1986383.html