2014-03-24 72 views
3

我試圖在Truecrypt捲上創建MS SQL Server數據庫。我需要我的系統具有以下屬性:如果未裝入Truecrypt卷,則無法訪問數據庫或數據庫日誌文件中的數據。我正在做以下創建數據庫:在MS SQL Server中使用truecrypt

CREATE DATABASE test1 CONTAINMENT=PARTIAL ON (NAME='test1_data', FILENAME='D:\SqlData') LOG ON (NAME='test1_log', FILENAME='D:\SQLDataLog'); 
go 

其中D:是我安裝的Trucrypt卷。這似乎工作正常,因爲它創建指定的文件和可用的數據庫。但是,我不確定它實際上是否安全。我認爲它將數據存儲在D:卷以外的某個位置。我能做到以下幾點:

use test1; 
go 
CREATE TABLE Persons (ID int, name varchar(255)); 
go 

INSERT INTO Persons VALUES (1, 'Jason'); 
go 

然後關閉我的數據庫客戶端卸載卷,重新打開客戶端(SQLCMD),然後執行:

use test1; 
go 
SELECT * FROM Persons; 
go 

,我得到我把數據很明顯。這意味着在Truecrypt卷之外有一些存儲發生。我是否做錯了什麼,誤解了什麼,或者我正在嘗試做什麼,但對MS SQL Server不可行?

+0

我會認爲truecrypt會抱怨很多讓你關閉卷如果SQL Server正在打開文件。你確定它真的沒有安裝? –

+0

@DigitalChris它抱怨並問我是否想強制卸載。我告訴它強制卸載,它似乎已經卸載。 D:卷在Truecrypt或文件瀏覽器中不可見。 – jcrudy

+1

運行這個來驗證你的文件真的在哪裏'USE Test1 SELECT name,filename FROM sys.sysfiles' – 2014-03-24 18:25:53

回答

1

此解決方案不安全。在各種情況下(例如,在排序或散列期間),SQL Server可能會自動將數據傳輸到tempdb,因此您可能最終泄漏您想保護的內容。 在這種情況下,我會離開TrueCrypt,如果可能的話,只使用Transparent Database Encryption(在第一個數據庫被加密後,也會自動加密tempdb)。或者,如果您真的想要使用TC,還可以使用TrueCrypt保護tempdb,並確保沒有人會強制卸下卷。否則,你會要求數據庫損壞和數據丟失。

0

您可以使用DBCC DROPCLEANBUFFERS清除緩存。然後,讀取將失敗。 CHECKPOINT強制寫入磁盤,並且即使沒有寫入任何內容,也總是寫入日誌。它也會失敗。

請注意,SQL Server也會寫入tempdb及其錯誤日誌。也許去其他地方。使用Process Explorer列出sqlservr.exe必須查找更多位置的打開文件句柄。

不過,我認爲用戶數據可以泄漏到tempdb的主要地方。

Endrju建議使用TDE值得研究,但我懷疑它可以防止溢出到tempdb。 tempdb用於臨時表,排序緩衝區,散列緩衝區,以及臨時數據。

請注意,當您卸載並重新安裝時,所有現有的文件句柄都將失效,並且SQL Server將不再能夠使用該數據庫。你必須把它離線和在線。但是,隨時卸載應該是安全的,因爲SQL Server崩潰一致。隨時即時斷電是安全的。

+0

使用TDE加密第一個數據庫後,tempdb會自動加密。 – Endrju

+1

@Endrju很高興知道。你已經有了TDE的+1。 – usr

+0

謝謝。備份也是加密的,所以這個重要的部分也受到保護。這是可惜的企業只有功能:( – Endrju