2014-03-27 109 views
0

在我的數據庫中我使用了使用對稱密鑰的數據庫列加密。我按照這個教程http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script/。它使用對稱密鑰,而其他人不可見。但是數據庫管理員可以通過執行調用對稱密鑰的查詢來查看加密列。sql server中的數據庫列加密?

USE EncryptTest 
GO 
OPEN SYMMETRIC KEY TestTableKey DECRYPTION 
BY CERTIFICATE EncryptTestCert 
SELECT CONVERT(VARCHAR(50),DECRYPTBYKEY(EncryptSecondCol)) AS DecryptSecondCol 
FROM TestTable 
GO 

我需要在數據庫級別加密和數據庫管理員也不應該能夠解密列。數據庫級別的加密有可能嗎?

回答

0

如果您不希望在該實例中是sysadmin角色成員的DBA具有對密鑰的任何訪問權限,那麼您不能允許數據庫執行加密。

即使您嘗試使用CREATE SYMMETRIC KEY的PASSWORD選項,DBA也可以使用Profiler查看SQL語句內部的密碼。 DBA當然可以訪問主密鑰(並且可能已經有了它的備份)。

如果要隱藏DBA的數據,您需要讓應用程序執行加密。

或者您可以信任您的DBA與他們正在保護的數據。

0

由於問了這個問題,SQL Server 2016已經發布,企業版包含一個名爲Always Encrypted的功能,該功能的設計在客戶端驅動程序中加密了執行加密的服務器上的列加密密鑰。我建議將「客戶端」放在像IIS這樣的中間件服務器上,以便可以更好地保護證書的網站和Web服務。

DBA無法實現的第二種加密解決方案是引入可擴展密鑰管理系統。對此的支持也是企業唯一功能。可擴展密鑰管理系統是一個單獨的擴展板或與SQL Server接口的系統,用於卸載可由不同於DBA的團隊管理的所有密鑰管理和加密處理。

第三,您可以設計一個解決方案,其中包括刪除證書的私鑰並將其置於DBA無法訪問的位置。當私鑰從加密層次結構中的證書中刪除時,只能對數據進行加密。