Sql-Server

如何加密要在連結伺服器上解密的數據?SQL

  • June 23, 2018

我一直在尋找 2 天的解決方案,但每個解決方案都不適用於我的情況。

我有 2 個 SQL 伺服器:DataServerInterfaceServer設置為連結伺服器。DataServer 完成我們所有的數據處理。InterfaceServer 僅從 DataServer 中提取它需要的數據。每台伺服器都有自己的加密過程,我們的合規部門不希望他們使用相同的密碼/證書/等…由於這些限制,我無法執行為我進行解密的儲存過程。

我嘗試使用 DecrypByKeyAutoCert() 函式創建視圖以及使用 SELECT … FROM OPENQUERY() 創建視圖以執行執行解密的儲存過程,但它們始終為解密數據返回 NULL 值。如果我在 DataServer 本身上執行它們,它會很好地返回數據。

有沒有辦法在 InterfaceServer 上創建一個非對稱密鑰,使用公鑰加密 DataServer 上的表中的數據,然後在複製所有內容後在 InterfaceServer 上解密它?

可以按照您的建議進行操作。您不能直接使用參數創建相同的非對稱密鑰,但您可以備份包含非對稱密鑰的數據庫,並在數據伺服器上備份數據庫主密鑰。在介面伺服器上恢復它們並使用 ALTER ASYMMETRIC KEY remove private key 在數據伺服器上刪除私鑰。這樣,數據伺服器只能加密,而介面伺服器可以使用相同的非對稱密鑰解密。

或者,您可以在每個伺服器上使用相同的 key_source 和 identity_value 創建一個由非對稱密鑰加密的對稱密鑰,並以加密狀態傳輸數據,然後在介面伺服器上對其進行解密。在後一種情況下,非對稱密鑰是否不同並不重要,因為每個非對稱密鑰都保護每台伺服器上相同的密鑰。如果您的目標是加密傳輸中的數據,那麼如果有任何問題,第二個將更容易恢復。

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