当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 准备SQL Server 2008透明数据加密

MSSQL
黑客经验谈 MSSQL SA权限入侵的感悟
3个步骤结束网站恶梦-SQL注入隐患!
用人工智能自动对SQL语句进行重写
防范sql注入式攻击js版本
SQL Server 2005数据库镜像配置脚本示例
SQL Server和Oracle的真正区别
如何把Access的数据导入到Mysql中
看看自己掌握了多少SQL快捷键
SQL2005数据库转到SQL2000的步骤
SQL“多字段模糊匹配关键字查询”
高手是怎样炼成的:精妙SQL语句介绍
SQL Server 2000数据库崩溃后的补救措施
SQL Server日志清除的两种方法教程简介
教你快速掌握数据库设计范式的基本概念
远程连接SQL Server 2000服务器的解决方案
循序渐进讲解数据表的十二个设计原则
经验总结:讲解大型数据库的设计准则
开发环境下优化SQl语句的十个重要步骤
如何查看并导出数据表中字段的注释信息
SQL Server 2005改进后的几个实用新特性

MSSQL 中的 准备SQL Server 2008透明数据加密


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 148 ::
收藏到网摘: n/a

问题

当浏览SQL Server 2008的新特性时,我们看到了透明数据加密。这看起来很有趣。您能为我们解释一下并介绍下执行它的细节吗?

专家解答

TDE(透明数据加密)是SQL Server 2008中的一个新特性;它提供了对数据和日志文件的实时加密。数据在它写到磁盘之前进行加密;当它从磁盘读出来时进行解密。TDE的“透明”是指加密是由数据库引擎来执行的,而SQL Server客户端对此完全不知道。要进行加密和解密不必编写任何代码。只要执行两个步骤将数据库为TDE准备好,然后加密就通过一个ALTER DATBASE命令在数据库级别开启了。

我们可能都听过关于保存了敏感信息的备份磁带丢失或被窃的事件。有了TDE,只要这个数据库开启了加密,那么只要使用标准BACKUP命令就会将备份文件也加密了。如果没有对用来加密数据的密钥的访问权限,那么备份文件(或磁盘上)中的数据就完全没用。

在我们进入执行TDE的步骤之前,让我们花几分钟来大概地讨论下加密。Wikipedia对加密的定义是“使用一个算法(叫做密码)来转化数据(指明码文本)、使其除非具有特定知识,一般指密钥,不然任何人都不能读取的过程”。为了加密数据,我选择了一个有效的算法并提供了密钥。加密所提供的安全性是基于算法的强度和密钥的保护。密钥有两种——对称密钥和非对称密钥。对于对称密钥,对数据的加密和解密使用相同的值。非对称密钥有两个组成部分——一个私钥和一个公钥。我使用私钥来加密数据而其他人必须使用公钥来解密数据。总之,对称密钥或非对称密钥对的私钥必须安全地存储以便可以有效地加密。

现在让我们看一个关于怎样执行TDE的例子。对一个特定数据库执行TDE包括下面四个步骤:

创建一个主钥。

创建或获得一个受主钥保护的证书。

创建数据库加密密钥并使用证书保护它。

将数据库设为使用加密。

创建一个主钥

主钥是一个对称密钥,是用来创建证书和非对称密钥的。执行下面的脚本来创建一个主钥: 

注意,密码应该为强密码(例如使用字母、数字、大写、小写和特殊字符),而且你应该将它备份(使用BACKUP MASTER KEY)和保存在一个安全地方。.

创建证书

证书可以用来创建用于数据加密的对称密钥或用来直接加密数据。执行下面的脚本来创建一个证书: 

以下为引用的内容:

      USE master;
     
  CREATE CERTIFICATE TDECert

  WITH SUBJECT = 'TDE Certificate'

  GO

注意,证书还要备份(使用BACKUP CERTIFICATE)并存储在一个安全地方。

创建一个数据库加密密钥

TDE需要一个数据库加密密钥。执行下面的脚本来创建一个新的数据库并为它创建一个数据库加密密钥: 

以下为引用的内容:

      CREATE DATABASE mssqltips_tde
     
  GO

  USE mssqltips_tde;

  CREATE DATABASE ENCRYPTION KEY

  WITH ALGORITHM = AES_256

  ENCRYPTION BY SERVER CERTIFICATE TDECert

  GO

为了与TDE一起使用,这个加密密钥必须由一个证书加密(密码不行),并且这个证书必须放在主数据库中。

激活TDE

执行TDE的最后一步是执行下面的脚本:  

以下为引用的内容:

      ALTER DATABASE mssqltips_tde
     
  SET ENCRYPTION ON

  GO

  SELECT [name], is_encrypted FROM sys.databases

  GO

你可以在sys.databases中查询is_encrypted字段来检查在一个特定数据库上是否激活了TDE。

注意:TDE只加密数据和日志文件的内容。它不会在数据在客户端和数据库服务器间传送时加密数据。