本篇文章是SQL Server安全系列的第九篇,详细内容请参考原文


Relational databases are used in an amazing variety of applications with connections from a dizzying array of clients over widely distributed networks,特别是互联网,使得数据几乎向任何人,任何地方开放。数据库可以包含相当大部分的人类知识,包括高度敏感的个人信息和关键数据。
数据库的这些特性使得有人想要窃取数据或通过篡改以损害它的主人。确保你的数据是安全的是一个关键部分来配置SQL Server和开发应用程序存储数据。这一系列将探索SQL Server 2012安全基础,那样你可以保护你的数据和服务器资源,getting as granular as you need to be to protect against the unique security threats that can affect your data.大部分的功能适用于早期版本的SQL Server,但我也会讨论只适用于SQL Server 2012和以后版本的功能。
即使是一个安全设计很好的数据库,如果攻击者能够访问包含数据库的磁盘文件,就容易受到攻击。单元级加密可以保护一些数据,但对这种攻击要完全保护,就有必要加密文件,而不只是数据。这正是透明数据加密(TDE),在这一篇你会知道TDE是什么,它是如何工作的,以及如何利用它来保护你的数据库文件。
透明数据加密(TDE)
在SQL Server 2008,微软推出透明数据加密。TDE是实时在文件级别加密和解密数据文件和日志文件。相比第八篇讲到的在列级上的数据加密,这种加密数据库中的所有数据。在第八篇你必须明确使用T-SQL函数加密数据,使用对称密钥,非对称密钥或证书来保护和解密数据。
TDE在文件级加密数据库。加密是透明的,它不会影响你访问数据。不需要任何特殊的编程,有专门为管理TDE支持的T-SQL。这使得TDE很容易设置和维护,虽然它需要更多的工作,在复制和移动数据库到SQL Server实例的不同位置。
一旦你为数据库启用了TDE,当数据写入到数据库时TDE会自动加密,当读取时会自动解密。TDE的目的是在数据和日志文件保护数据,保护它的安全防止攻击者试图直接从文件访问数据。如果你需要通过一个过夜的包裹递送服务来运送你的数据库文件,比如FedEx或者UPS,这样的场景就很有用了。没有TDE,攻击者可以从货车后面偷你的包裹,然后在一个拥有系统管理员权限的实例上附加,并获取数据。但如果在数据库中启用了TDE,整个数据集是安全加密的;在没有密钥的情况下,是没有办法访问数据的。其他一些TDE可用场景是你担心攻击者,比如内部人员,可能会以某种方式访问物理数据文件,或者你需要保护副本存档的数据库安全。
TDE是如何工作的
TDE需要一个证书来访问物理数据文件。没有用于加密数据库的证书,数据是不可用的。这意味着,不要把证书备份和它所保护的数据库保存在很近的地方!否则攻击者会得到所有她需要的来解密你的数据。她需要做的是在她控制的SQL Server实例上安装证书,并用它来附加数据库,然后就可以获取解密后的数据。
需要注意的是TDE加密所有写入到数据库的数据,然后根据查询解密需要的数据。所以,只有当数据是静止的、存储在数据库中,它才被TDE保护。TDE以每个8K的页加密和解密数据。
如果在一个SQL Server实例的任何数据库设置成TDE保护,SQL Server会自动用TDE保护tempdb库。这是有道理的,因为一些受保护数据库的数据可以暂时存储在tempdb。问题是,加密会导致性能下降。存储在tempdb中的所有数据都要加密,实例中的其他没有使用TDE保护的数据库存储到tempdb也需要加密。因此,这些数据库的性能可能会受到影响。
为了让一切运转,你需要有权限在master数据库创建database master key和证书,在用户数据库上有control权限启用TDE。大多数时候,系统管理员会启用数据库的TDE,所以权限需求应该不是问题。
TDE的局限性
为了有效地使用TDE,你应该明白TDE能做什么以及它不擅于做什么。考虑TDE的这些局限:
->你不能加密数据库中的数据的一个子集,它是全部或无
->TDE是无法通过数据库引擎限制数据的访问。通过TDE数据访问是不变的。如果你有一个用户正在运行一个应用程序,并且应用程序或用户有访问数据库中的数据所需的权限,TDE不会以任何方式改变数据访问。它只是保护数据库文件。
->TDE不是服务器、SQL Server实例、或存储在数据库中的敏感数据安全的替代品。你还需要仔细考虑使用防御纵深的分层安全保护你的数据。TDE is just one of those layers designed to protect against specific attacks against data at rest in the data and log files.
->TDE最大的缺点之一是,文件流数据是不加密的。This is data blobs stored outside of SQL Server but managed and secured by the database.
->TDE只在SQL Server企业版和开发版中能使用。
正如你可以看到,TDE有这些“限制”,这表明它并不能作为一种安全的灵丹妙药。但如果你的数据威胁刚好对应于它所提供的保护,TDE可以是一个重要的安全功能。
TDE性能
TDE一个你需要考虑的问题是性能。加密是一个昂贵的操作。TDE的表现相当不错,因为TDE不加密SQL缓存中的数据。只有当数据被写入磁盘,SQL Server才对它进行加密。因此,如果数据在缓存中,加密并不一定会发生,从而提高整体效率。微软已经花费了大量的时间在数据库中尽可能高效的加密,但在读或写数据的时候仍然会导致性能问题,因为加密使用复杂的算法。
使用TDE
示例代码显示如何使用TDE以及对数据库的影响。脚本中的部分代码,可能需要更改文件路径以适应你本地SQL Server的实例,比如数据库备份位置和证书备份位置。

-- Make a copy of AdventureWorks2012 database
-- Change the path to the appropriate backup directory
BACKUP DATABASE AdventureWorks2012
    TO DISK = N'D:\SQL2012\MSSQL11.SQL12\MSSQL\Backup\AdventureWorks2012.bak'
    WITH NOFORMAT, INIT, NAME = N'AdventureWorks2012 Full Database Backup',
    SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10;
GO

RESTORE DATABASE AdventureWorks2012Copy
    FROM DISK = N'D:\SQL2012\MSSQL11.SQL12\MSSQL\Backup\AdventureWorks2012.bak'
    WITH 
        FILE = 1, NOUNLOAD, REPLACE, STATS = 10,
        MOVE 'AdventureWorks2012_Data' TO N'D:\SQL2012\MSSQL11.SQL12\MSSQL\DATA\AdventureWorks2012Copy.mdf',
        MOVE 'AdventureWorks2012_Log' TO N'D:\SQL2012\MSSQL11.SQL12\MSSQL\DATA\AdventureWorks2012Copy.ldf';
GO
View Code

相关文章: