對於TDE加密數據庫,我知道數據在寫入數據庫時每頁都被加密。當我運行將幾個表連接在一起的查詢並對這些表應用一些過濾時,解密何時發生?什麼時候TDE解密發生
是否必須先解密表,然後執行連接和過濾,還是能夠使用加密數據進行連接和過濾,然後解密結果?
對於TDE加密數據庫,我知道數據在寫入數據庫時每頁都被加密。當我運行將幾個表連接在一起的查詢並對這些表應用一些過濾時,解密何時發生?什麼時候TDE解密發生
是否必須先解密表,然後執行連接和過濾,還是能夠使用加密數據進行連接和過濾,然後解密結果?
從MSDN:
加密數據庫文件的頁面級執行。加密數據庫中的頁面在寫入磁盤之前被加密,並在讀入內存時被解密。
您需要了解buffer pool的工作原理。緩衝池是磁盤上數據的緩存。查詢總是從BP讀取數據並將更改寫入BP(簡化說明)。數據從BP傳輸到磁盤時發生加密,當數據從磁盤傳輸到BP時發生解密。 Read Understanding how SQL Server executes a query瞭解所有這些工作的細節。
看來解密是在從磁盤讀取行時執行的。請注意,靜止數據(保存到磁盤)僅被認爲是受TDE保護的。一旦進入內存,數據不再受tde保護。
TDE旨在通過加密的物理數據文件,而不是數據本身,以保護靜態數據。此級別的保護可防止在文本編輯器中打開數據和備份文件以顯示文件內容。
TDE加密發生在將數據寫入磁盤之前,並且在查詢和調用存儲器時解密數據。這種加密和解密不需要任何額外的編碼或數據類型修改;因此它是透明的。一旦數據從磁盤中回收到內存中,就不再被認爲是靜止的。它已成爲傳輸中的數據,這超出了此功能的範圍。因此,除了TDE之外,您應該考慮對敏感數據應用其他支持保護層,以確保完全防止未經授權的披露。例如,除TDE外,您可能希望實施加密數據庫連接,單元級加密或單向加密。對於所需的傳輸保護中的其他數據,從數據庫的外部,您可能需要諮詢或推遲到您的網絡管理團隊。
真正的問題是,它是如何知道從磁盤讀取哪些行以便能夠運行查詢,除非它讀取整個批次,解密所有(考慮到緩衝池)並且然後能夠對其進行處理「在記憶中」。從「瞭解SQL Server執行查詢的方式」的示例流程表明,SQL Server知道哪些頁面是什麼,但是因爲它已被加密,所以無法知道我想要「從myTable where name ='bob'」選擇*。我錯過了什麼? –
你不明白哪部分文檔?這似乎很好解釋:https://msdn.microsoft.com/en-us/library/bb934049.aspx。 –
解密之前,頁面不可讀。沒有行或列,所以引擎無法對它們進行任何計算。如果你有*列*加密,這將是一個不同的問題。換句話說,引擎根本就不知道加密,就它而言,它只是文件系統上的另一層。 –