Sql-Server

有沒有辦法在不更改程式碼庫的情況下在某些列上添加數據庫加密?

  • March 4, 2022

我經歷過一些公司擁有各種不同的程式碼庫,從沒有原始碼的 20 年曆史程式碼到有原始碼但有數千個數據庫呼叫的 1 到 10 年曆史程式碼。對於某些數據庫欄位,公司希望加密列,例如一個人的地址,而不需要更新呼叫該表的所有程式碼。他們還希望該列仍可在 where 子句中搜尋,例如“what people are located at 1st street”,其中 where 子句是 street like ‘%1st street%’。

有沒有一種方法可以輕鬆地執行這種加密,以便 SQL 伺服器在伺服器的後台處理數據庫加密和解密,而不必更改所有程式碼來處理它?如果不是,那麼實現這一點的最簡單方法是什麼,這將有助於減輕大量程式碼更改,除非大量程式碼更改是唯一的方法?

您可以嘗試使用的最好的東西是 AlwaysEncrypted 功能。這有利有弊 - 但您可以有效地在列上“打開它”,然後使用證書對其進行解密。所以它可以在程式碼“外部”完成,只需要對連接字元串和證書的使用進行一些更改。

您可以在此處閱讀有關該功能的更多資訊。這是您無需購買第三方產品或更改程式碼即可獲得的最接近的方法。

正如 DJ 在評論中提到的那樣,您可能正在尋找混淆而不是加密

您正在尋找的是Dynamic Data Masking

NotAllowedUser如果使用者執行此查詢,則使用動態數據屏蔽:

SELECT * FROM Employee_Financial;  

他/她不會看到數據

在此處輸入圖像描述

  • 你不需要更新程式碼。
  • 您仍然可以使用 where 子句進行搜尋is street like '%1st street%'
  • SQL Server 根據使用者為您管理混淆。

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