SQL Server 與資料庫加密金鑰(資料庫引擎)

適用於:SQL Server

SQL Server 會使用加密金鑰,來協助保護儲存在伺服器資料庫中的資料、認證和連線資訊。 SQL Server 有兩種類型的金鑰:對稱與非對稱。 對稱金鑰會使用相同的密碼為資料加密與解密。 非對稱金鑰會使用某個密碼來加密資料 (稱為「公開」金鑰),並使用另一個密碼來解密資料 (稱為「私密」金鑰)。

在 SQL Server 中,加密金鑰包括用於保護機密資料的公開、私密和對稱金鑰的組合。 當您初次啟動 SQL Server 執行個體時,系統會在 SQL Server 初始化期間建立對稱金鑰。 SQL Server 使用該金鑰來加密儲存在 SQL Server 中的敏感資料。 作業系統會建立公鑰和私鑰,而它們會保護對稱金鑰。 針對在資料庫中儲存機密資料的每個 SQL Server 執行個體,建立一組公開和私密金鑰。

SQL Server 與資料庫金鑰的應用程式

SQL Server 對於金鑰有兩個主要的應用:在 SQL Server 執行個體上產生並供其使用的服務主要金鑰 (SMK),以及用於資料庫的資料庫主要金鑰 (DMK)。

服務主要金鑰

服務主要金鑰是 SQL Server 加密階層的根。 SQL Server 在實例首次啟動時產生 SMK,並用它加密連結伺服器的密碼、憑證以及每個資料庫的主金鑰。

SMK 是透過使用本地機器金鑰或 Windows 資料保護 API(DPAPI)加密的。 DPAPI 使用由 SQL Server 服務帳號的 Windows 憑證衍生出的金鑰。 由於金鑰受兩種方式保護,服務主金鑰可由建立它時所使用的服務帳號開啟,或由有權存取機器認證的主體開啟。

SQL Server 使用 AES 加密演算法來保護服務主金鑰與資料庫主金鑰。 AES 取代了 SQL Server 2012(11.x)之前版本中使用的 3DES 演算法。 當你從較早期版本升級 資料庫引擎 實例後,重新產生 SMK 和 DMK,將主金鑰升級為 AES。 欲了解更多關於再生SMK的資訊,請參見 ALTER SERVICEALTER SERVICE MASTER KEY (Transact-SQL) 與 ALTER MASTER KEY (Transact-SQL)。

資料庫主要金鑰

資料庫主金鑰是一種對稱金鑰,用來保護資料庫中存在的憑證私鑰與非對稱金鑰。 它也能加密資料,但長度有限,使得它用於加密資料時不如非對稱金鑰實用。 為了實現資料庫主金鑰的自動解密,會使用 SMK 加密該金鑰的副本。 SQL Server 將該副本同時存放在使用金鑰的資料庫與master系統資料庫中。

系統資料庫中儲存 master 的 DMK 副本會在 DMK 變更時靜默更新。 你可以使用 ALTER MASTER KEY(Transact-SQL) 的 DROP ENCRYPTION BY SERVICE MASTER KEY 選項來變更這個預設值。 未被服務主金鑰加密的 DMK 必須使用 OPEN MASTER KEY (Transact-SQL) 並輸入密碼開啟。

管理 SQL Server 與資料庫金鑰

管理加密金鑰包括建立新的資料庫金鑰、備份伺服器與資料庫金鑰,並知道何時以及如何還原、刪除或更改金鑰。

要管理對稱鍵,請使用 SQL Server 內建的工具執行以下任務:

  • 備份伺服器和資料庫金鑰的副本,這樣你才能用它們來恢復伺服器安裝或作為計畫遷移的一部分。
  • 將之前儲存的金鑰還原至資料庫。 恢復金鑰後,新的伺服器實例可以存取不是由其原先加密的現有資料。
  • 萬一您無法再存取加密資料,請刪除資料庫中的加密資料。
  • 在極不可能的金鑰被洩漏時,重新建立金鑰並重新加密資料。 作為安全最佳實務,應定期重建金鑰,例如每隔幾個月,以保護伺服器免受試圖破解金鑰的攻擊。
  • 在伺服器向外延展部署中新增或移除伺服器執行個體;在此部署中,多部伺服器會共用單一資料庫,以及可對該資料庫進行可逆加密的金鑰。

重要安全資訊

若要存取由服務主金鑰保護的物件,你需要下列其中之一:用來建立金鑰的 SQL Server 服務帳號,或是綁定到你建立金鑰之系統的電腦(機器)帳號。 你可以更改 SQL Server 服務帳號或電腦帳號,而不會失去金鑰的存取權。 但如果你同時更改兩個帳號,就會失去服務主金鑰的存取權。 如果你失去對服務主金鑰的存取權,且若沒有這兩個元素中的任一項,你就無法解密原始金鑰所加密的資料和物件。

除非你有那個金鑰,否則無法恢復用服務主金鑰保護的連線。

要存取以資料庫主金鑰保護的物件和資料,你只需要能幫助保護金鑰的密碼。

警告

如果你失去本文所描述的所有金鑰存取權,你也會失去這些金鑰所保護的物件、連線和資料。 你可以如 還原服務主金鑰 所述還原服務主金鑰,或者回到原始加密系統恢復存取權限。 沒有其他方法可以恢復存取權限。