2016-09-26 72 views
1

对于TDE加密数据库,我知道数据在写入数据库时​​每页都被加密。当我运行将几个表连接在一起的查询并对这些表应用一些过滤时,解密何时发生?什么时候TDE解密发生

是否必须先解密表,然后执行连接和过滤,还是能够使用加密数据进行连接和过滤,然后解密结果?

+0

你不明白哪部分文档?这似乎很好解释:https://msdn.microsoft.com/en-us/library/bb934049.aspx。 –

+1

解密之前,页面不可读。没有行或列,所以引擎无法对它们进行任何计算。如果你有*列*加密,这将是一个不同的问题。换句话说,引擎根本就不知道加密,就它而言,它只是文件系统上的另一层。 –

回答

1

MSDN

加密数据库文件的页面级执行。加密数据库中的页面在写入磁盘之前被加密,并在读入内存时被解密。

您需要了解buffer pool的工作原理。缓冲池是磁盘上数据的缓存。查询总是从BP读取数据并将更改写入BP(简化说明)。数据从BP传输到磁盘时发生加密,当数据从磁盘传输到BP时发生解密。 Read Understanding how SQL Server executes a query了解所有这些工作的细节。

1

看来解密是在从磁盘读取行时执行的。请注意,静止数据(保存到磁盘)仅被认为是受TDE保护的。一旦进入内存,数据不再受tde保护。

TDE and Decryption

TDE旨在通过加密的物理数据文件,而不是数据本身,以保护静态数据。此级别的保护可防止在文本编辑器中打开数据和备份文件以显示文件内容。

TDE加密发生在将数据写入磁盘之前,并且在查询和调用存储器时解密数据。这种加密和解密不需要任何额外的编码或数据类型修改;因此它是透明的。一旦数据从磁盘中回收到内存中,就不再被认为是静止的。它已成为传输中的数据,这超出了此功能的范围。因此,除了TDE之外,您应该考虑对敏感数据应用其他支持保护层,以确保完全防止未经授权的披露。例如,除TDE外,您可能希望实施加密数据库连接,单元级加密或单向加密。对于所需的传输保护中的其他数据,从数据库的外部,您可能需要咨询或推迟到您的网络管理团队。

+0

真正的问题是,它是如何知道从磁盘读取哪些行以便能够运行查询,除非它读取整个批次,解密所有(考虑到缓冲池)并且然后能够对其进行处理“在记忆中”。从“了解SQL Server执行查询的方式”的示例流程表明,SQL Server知道哪些页面是什么,但是因为它已被加密,所以无法知道我想要“从myTable where name ='bob'”选择*。我错过了什么? –

相关问题