2014-01-19 13 views
1

我是數據庫加密的新手。我們需要加密顯示敏感信息的各種表格中的一些列。我們遇到的問題是,訪問數據庫或其證書和對稱密鑰(甚至不是dbas)的任何人都不應該看到數據,只有查詢數據庫中數據的應用程序的某些用戶才能看到這些信息。SQL Server:如何限制訪問加密列,甚至從DBA?

所以我們想出了這一點:

  • 與加密列
  • 由證書保護的所有按鍵,以及訪問這些證書的存儲過程的每個表創建1個對稱密鑰現在已與定義:

    OPEN SYMMETRIC KEY Key_SalaryTable 
    DECRYPTION BY CERTIFICATE SystemCertificate 
    WITH PASSWORD = 'password'; 
    

(這意味着針對其用於打開01的證書的密碼是硬編碼到存儲過程)

但是還有一個問題,任何數據庫管理員可以只查看存儲過程或調用存儲過程直接知道如何打開鍵查看工資表

即使如果我們限制每個用戶對存儲過程的訪問權限,dba就可以輕鬆地覆蓋並提取信息,然後再次設置限制,並且沒有人會知道信息已被泄露。

有沒有人有更好的解決方案?

+0

您需要將密碼保存到你的'Key_SalaryTable'您的應用程序不上數據庫本身,並將其作爲參數傳遞給存儲過程。 – wdosanjos

+0

但我認爲我們不能將密碼作爲參數傳遞到存儲過程,除非我們將其更改爲動態。請參閱 http://connect.microsoft.com/SQLServer/feedback/details/369270/open-symmetric-master-key-password-parameterization –

+0

請參閱:無法將密鑰傳遞到存儲過程http:// social .msdn.microsoft.com /論壇/ zh-CN/439d57c6-4f0b-4590-991b-97d6881409b3 /問題開幕對稱密鑰與傳遞密碼?論壇= sqlsecurity –

回答

2

另一種方法是從應用程序本身執行OPEN SYMMETRIC KEY/CLOSE SYMMETRIC KEY命令,而不是在存儲過程中執行。順便說一句,在會議結束或會議結束之前,會議期間鑰匙仍處於開放狀態。確保應用程序和數據庫之間的連接已加密「on the wire」。

在ASP.NET端,您可以在加密的web.config部分保留密碼。

1

您可以從應用程序上傳密碼作爲參數傳遞給存儲過程,
密碼作爲參數,可以只通過使用動態查詢

--open對稱密鑰

DECLARE @open爲nvarchar(200)

SET @open = 'OPEN SYMMETRIC KEY Key_SalaryTable DECRYPTION BY CERTIFICATE SystemCertificate WITH PASSWORD =' '' + @密碼+ '' ''
EXEC sp_executesql的@open

- 查詢

--close對稱密鑰
CLOSE SYMMETRIC KEY Key_SalaryTable