SQL Server 2008的透明数据加密
2008-08-09 09:55:09 来源:WEB开发网最后,在TestDatabase2 中创建了DEK,Encryption属性设置为true。所有的语句都成功执行。如果你查询sys.dm_database_encryption_keys,你将看到TestDatabase2的encryption_state是2,这表示加密结束了但没有完成。
是否使用了FileStream数据类型?
使用了filestream类型的数据库可以使用TDE来进行加密,但是文件流数据不会被加密。
当激活TDE之后会影响什么?
在一个数据库上激活TDE会影响以下事情:
事务日志
一旦TDE激活了,SQL Server 通过将文本数据清理出去从而确保日志文件不包含文本数据。SQL Server 从具有加密格式的新VLF开始。
TEMPDB系统数据库
当你在任何数据库上激活了TDE之后这将会自动加密。这会导致使用tempdb数据库的非加密数据库性能下降。
日志传送和数据库镜像
如果你在一个传送日志到另一个数据库的数据库(意味着激活了日志传送的数据库)上激活了TDE,那么日志传送操作将会在辅助数据库上失败,除非在辅助服务器上证书可用。
压缩备份
下面是在一个激活了TDE的数据库上进行压缩备份的测试,看起来在激活TDE的数据库上压缩并不怎么高效:
-- create a new database for testing compressed backup on TDE enabled database
USE master
GO
CREATE DATABASE [TestDatabase3] ON PRIMARY
( NAME = N'TestDatabase3', FILENAME = N'E:TestDatabase.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ),
LOG ON
( NAME = N'TestDatabase3_log', FILENAME = N'E:TestDatabase3_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
-- Create a table and insert some records
USE TestDatabase3
GO
CREATE TABLE TestTable (Id int primary key, [Value] char(8000))
GO
INSERT INTO TestTable VALUES (1, 'value1')
INSERT INTO TestTable VALUES (2, 'value1')
INSERT INTO TestTable VALUES (3, 'value1')
INSERT INTO TestTable VALUES (4, 'value1')
INSERT INTO TestTable VALUES (5, 'value1')
INSERT INTO TestTable VALUES (6, 'value1')
-- Backup the TestDatabase3 without compressing it
BACKUP DATABASE [TestDatabase3]
TO DISK = N'E:TestDatabase3Full.bak'
WITH NOFORMAT, NOINIT, NAME = N'TestDatabase3-Full Database Backup'
GO
-- Backup the TestDatabase3 with compression
BACKUP DATABASE [TestDatabase3]
TO DISK = N'E:TestDatabase3Full_Compressed.bak'
WITH NOFORMAT, NOINIT, NAME = N'TestDatabase3-Full Database Backup (Compressed)', COMPRESSION
GO
-- Now enable TDE on this
-- Use the code we used with first example
-- Backup the TestDatabase3 again (after TDE enabled) without compressing it
BACKUP DATABASE [TestDatabase3]
TO DISK = N'E:TestDatabase3Full_Encrypted.bak'
WITH NOFORMAT, NOINIT, NAME = N'TestDatabase3-Full Database Backup (encrypted)'
GO
-- Backup the TestDatabase3 with compression
BACKUP DATABASE [TestDatabase3]
TO DISK = N'E:TestDatabase3Full_Encrypted_Compressed.bak'
WITH NOFORMAT, NOINIT, NAME = N'TestDatabase3-Full Database Backup (Encrypted and compressed', COMPRESSION
GO
这个代码创建一个数据库并插入一些记录到数据表中。然后这个数据库被备份两次,一次没有压缩另一次有压缩。然后你需要在这个数据库上激活TDE并执行其它的与激活TDE之前备份所使用的相同代码。备份文件规模是:
在激活TDE之前完全备份1,365 KB
在激活TDE之前有压缩的完全备份124KB
激活TDE之后的完全备份1,365 KB
激活TDE之后有压缩的完全备份 1,278 KB
你可以看到它们的不同。结果证明激活了TDE的数据库的压缩备份文件不那么高效。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接