Encryption

如何保護sql server中的證書

  • October 19, 2016

我在 SQL Server 中使用對稱密鑰加密,但問題是如果有人有權瀏覽數據庫,他們可以輕鬆查看證書和對稱密鑰,因此可以使用這些密鑰訪問加密數據。如何防止這種情況?

雖然確實具有讀取權限的任何人都可以使用 SQL Server Management Studio 瀏覽數據庫,但需要授予其他權限才能使用密鑰解密數據。首先要記住的是,證書是一個公共對象,它是相關的私鑰,需要保護以確保未經授權的使用者無法使用它來解密對稱密鑰和隨後的數據。私鑰由數據庫主密鑰加密,對任何使用者都不可見,即使對那些具有 sysadmin 角色的使用者也是如此。僅僅因為使用者可以看到這些對象並不意味著他們可以使用它們。使用您描述的加密層次結構解密數據所需的權限,這是一個受數據庫主密鑰保護的證書保護的對稱密鑰,是證書上的 CONTROL 和對稱密鑰上的 REFERENCES。如果沒有這兩個權限,就無法解密。但是,如果您將證書的 CONTROL 權限直接授予使用者,或者使用者處於 db_owner、db_ddladmin 或 db_securityadmin 角色中,則使用者可以備份證書和私鑰,這對您的加密安全構成威脅. 除了從上述角色中刪除使用者之外,還有多種方法可以解決此問題。一種是在您的層次結構中使用非對稱密鑰而不是證書,因為沒有用於非對稱和對稱密鑰的備份命令。另一種是使用程式碼簽名並僅將權限授予證書使用者。也有人提到可能可以在一個過程中使用模擬,或者“執行為”,但這可能不是最安全的選擇。如果您想用層次結構中的非對稱密鑰替換證書,則應備份數據庫的數據庫主密鑰並備份數據庫,然後在非生產環境中恢復兩者,以便您可以創建腳本並對其進行完整測試在生產環境中嘗試此操作之前。

如果您真的想隱藏所有對象的名稱,那麼您可以拒絕對數據庫中的使用者進行視圖定義。同樣,首先在​​非生產環境中進行測試。

保護密鑰相當容易——只要確保沒有數據庫使用者對他們有權限,MSDN關於創建對稱密鑰的文章詳細說明了查看/更改密鑰所需的權限,所以只要確保沒有人擁有這些權限。

顯然我不了解您的具體應用程序,但是當您說“任何有權探索數據庫的人”時,我最初的感受是為什麼許多(任何)使用者都擁有如此高的權限?您可能會遇到比使用者剛拿到鑰匙更多的問題。最佳做法是只向任何特定使用者授予最低限度的必要權限。

引用自:https://dba.stackexchange.com/questions/152571