探索中国CIO人才现状 | 第四季调研报告
使用透明数据加密技术保护静态数据
2015-08-03  来源:techtarget

SQL Server Enterprise推出了透明数据加密(tdE)功能,它是数据库引擎中内置的一种加密技术,支持在数据库层面上保护保密信息。与数据值加密不同,后者只是加密数据本身,而tdE则是加密物理数据库文件,防止未授权用户将一个受tdE保护的数据库附加或恢复到另一个服务器,然后再访问其中的数据。

合规性和保密要求使数据保护比以前更加重要。有了tdE,管理员就可以在数据库层次上加密数据,保护所有静态数据,而不需要修改模式或访问数据的T-SQL语句。

透明数据加密使用AdvancedEncryption Standard(高级加密标准)和tripleData Encryption Standard(三层数据加密标准)算法去保护数据文件、事务日志文件(.ldf)和备份文件(.bak)。tdE加密和解密过程对于连接数据库的应用程序及用户是完全透明的。我们不需要给正常要求授权之外的帐户分配特殊的权限。

tdE在页一级执行实时I/O加密和解密。数据库引擎会先透明地加密页,然后再将它们写回到磁盘中,在将数据读取到内存时解密数据,其间不需要修改任何特殊的编码或数据类型。

在一个受tdE保护的数据库中,一个对称数据库加密密钥(DEK)存储在数据库的启动记录中。为了保护这个DEK,我们必须使用一个由主数据库创建并用主密钥保护的证书,或者使用一个存储在可扩展密钥管理(EKM)模块的非对称密钥。这两种方法都会创建一种密钥层次,防御不包含该证书或非对称密钥的SQL Server实例无法访问数据库文件。

所有这些意味着必须有正确的证书或密钥才能恢复或附加一个数据库。因此,无论何时使用tdE去加密数据库,都应该备份解锁这些数据库时所需要的全部证书或密钥。否则,在发生灾难事件之后可能无法访问数据。

如果是使用证书,那么使用tdE加密一个数据库的过程非常简单:

  • 创建一个主密钥
  • 创建证书
  • 创建DEK
  • 使用证书保护它
  • 在数据库中启用tdE

如果准备在一个EKM模块中使用非对称密钥来保护DEK,那么实现过程会稍微复杂一些。

透明数据加密的不同之处

微软在SQL Server 2008Enterprise中首次引入tdE。在此之前,SQL Server只支持数据级加密,它只会对于特定的数据列。数据级加密是一种更细粒度的加密方法,因为我们可以精确控制加密哪些数据。

另一方面,数据级加密带有一定的过载。例如,在数据级加密中,我们只能加密varbinary字段,这意味着很可能必须创建额外的字段或修改现有字段。此外,我们还必须在将数据插入到字段时专门对它进行加密,然后在取回数据时执行显式解密和转换,这意味着现有的查询都必须修改。

此外,数据级加密会牺牲一定的性能,因为加密限制了查询引擎高效使用索引和优化技术的能力。

tdE实现起来更简单一些。我们不需要创建特殊的字段,也不需要修改代码。数据引擎会处理所有的加密和解决操作,它们对于用户和应用程序都是透明的。虽然tdE可能会影响性能,但是这种影响远远低于数据级加密,因为tdE应用于文件层面,而非数据层面。

然而,性能仍然是一个要注意的问题,因为tdE需要额外的CPU处理时间去加密和解决数据页。I/O使用率越高,对性能可能造成的影响就越大,特别是数据量较大的情况下。此外,如果在一个SQL Server实例的所有数据库上实现tdE,那么数据库引擎还会加密tempdb数据库,这样也会影响该实例中所有数据库的性能。

云环境中的透明数据加密

微软最近在Azure SQLDatabase以预览版特性的方式添加了tdE。与其SQL Server Enterprise版本类似,SQLDatabase tdE也支持数据库级的透明加密。然而,由于它还处于预览状态,因此在这个特性官方正式发布之前,SQL Database tdE还不能用于生产环境数据库。

SQL Database tdE会对数据库及其备份和事务日志执行实时加密和解密,完全不需要修改调用的应用程序。tdE配置可以在Azure网站上修改,也可以使用PowerShell或RESTfulAPI来配置,但是必须先注册使用tdE预览版特性。

SQL Database使用一个DEK去加密数据库,并且使用一个内置的服务器证书来保护DEK。每一个SQL Database服务器都使用不同的证书,它由SQLDatabase自动创建并存储于主数据库中。此外,Azure每90天就会轮循一些证书。在迁移启用了tdE的数据库时,我们必须解决数据库,然后再迁移之后重新加密。

透明数据加密:只是整个难题的一部分

SQL Server tdE只能保护静态数据。通过网络传输或位于内存中的数据不属于静态数据,因此不能受到保护。为了全面保护数据库及其数据,我们还应该在使用tdE的同时结合其他的技术,如SSL连接或数据级加密。

即便如此,在加密静态数据时,tdE仍然是一种有效的工具。我们可以在不修改应用程序或数据库模式的前提下轻松实现数据库级加密。虽然性能可能是tdE的一个问题,但是其影响不如数据级加密技术。即使tdE确定会影响性能,但是保护敏感数据的能力通常值得牺牲一定的性能。如果数据保护对于运营环境而言至关重要,那么tdE应该成为优先考虑的方法。