SQLServer2008的透明数据加密

SQLServer2008的透明数据加密,第1张

SQLServer2008的透明数据加密,第2张

对一个数据库管理员来说,当要保护你所支持的数据库时,安全是要考虑的最重要方面之一。我们使用多种机制和技术来保护我们的数据和数据库,例如防火墙、认证和数据加密。不过尽管我们为我们的环境设置了安全,但是关于数据库安全还总是有问题出现。尽管我们在保护我们的数据库,但是如果有人窃取mdf 文件或备份文件那么会怎么样呢?但是在SQL Server 2008之前没有什么方法来使用第三方解决方案控制这种场景也没有什么本地方法来处理这个问题。SQL Server 2008推出了一个新的特性来保护数据库,它叫做透明数据加密(Transparent Data Encryption)——TDE,它对整个数据库提供了保护。这篇文章的内容包括:

  什么是透明数据加密?

  TDE的执行。

  我的数据库现在是安全的吗?

  在激活TDE之前需要考虑什么?

  当激活TDE之后会影响什么?

  什么是透明数据加密?

  Microsoft SQL Server 2008推出了另一个级别的加密——透明数据加密。TDE是全数据库级别的加密,它不局限于字段和记录,而是保护数据文件和日志文件的。在一个数据库上的TDE执行对于连接到所选数据库的应用程序来说是非常简单而透明的。它不需要对现有应用程序做任何改变。这个保护是应用于数据文件和日志文件以及备份文件的。一旦在一个数据库上激活了TDE,备份恢复到另一个SQL Server实例或附加数据文件到另一个SQL Server实例上去将是不允许的,除非用来保护数据库加密密钥(DEK)的证书是可用的。

  TDE的加密特性是应用于页面级别的。一旦激活了,页面就会在它们写到磁盘之前加密,在读取到内存之前解密。有一点一定要记住,那就是SQL Server和客户端应用程序之间的通信渠道没有通过TDE来保护和加密。

  透明数据加密使用一个数据加密密钥(DEK)用于加密数据库,它存储在数据库启动记录中。DEK由一个存储在主数据库中的证书来保护。可选的,DEK可以由一个放置在硬件安全模块(HSM)中的非对称密钥以及外部密钥管理(EKM)的支持来保护。证书的私钥由对称密钥的数据库主密钥来加密,它通常由一个强密码来保护。注意,尽管这个证书可以由一个密码来保护,但是TDE要求这个证书由数据库主密钥来保护。数据库主密钥由服务主密钥来保护,而服务主密钥由数据保护API来保护。

  TDE的执行

  如同上面所提到的,TDE的执行相对简单。下面是一个示例脚本,它使得在一个叫做TestDatabase的数据库上激活了TDE。 

  -- 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 = 'Pa$$w0rd4545';

  END

  GO

  -- Create the certificate in the master database.

  USE master;

  GO

  -- Since ENCRYPTION BY PASSWORD is not mentioned, the private key of the certificate

  -- will be encrypted by database master key created above.

  IF NOT EXISTS (SELECT * FROM sys.certificates WHERE name LIKE '%DEKCertificate%')

  BEGIN

  CREATE CERTIFICATE DEKCertificate WITH SUBJECT = 'DEK Certificate'

  END

  GO

  -- Create Database Encryption Key (DEK) in the user database

  USE TestDatabase

  GO

  IF NOT EXISTS (SELECT * FROM sys.dm_database_encryption_keys WHERE database_id = DB_ID('TestDatabase'))

  BEGIN

  CREATE DATABASE ENCRYPTION KEY

  WITH ALGORITHM = AES_128

  ENCRYPTION BY SERVER CERTIFICATE DEKCertificate

  END

  GO

  -- 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).

  -- Set the DEK on in the TestDatabase.

  ALTER DATABASE TestDatabase

  SET ENCRYPTION ON

  GO

  -- 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

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQLServer2008的透明数据加密

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情