SQL Server 和資料庫加密金鑰 (Database Engine)

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

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

SQL Server 和資料庫金鑰的套用

SQL Server 對於金鑰有兩個主要的套用:針對 SQL Server 執行個體產生「服務主要金鑰」(Service Master Key,SMK),並將「資料庫主要金鑰」(Database Master Key,DMK) 用於資料庫。

SMK 會在 SQL Server 執行個體第一次啟動時自動產生,並用來加密連結伺服器密碼、認證和資料庫主要金鑰。SMK 的加密方式,是使用透過 Windows Data Protection API (DPAPI) 的本機電腦金鑰。DPAPI 會使用一個衍生自 SQL Server 服務帳戶和電腦認證之 Windows 認證的金鑰。服務主要金鑰只能由建立它時所使用的服務帳戶解密,或是只能由可以存取電腦認證的主體解密。

資料庫主要金鑰是一個用來保護資料庫中憑證之私密金鑰和非對稱金鑰的對稱金鑰。它也可以用來加密資料,但是有長度上的限制,因此與對稱金鑰相較之下,它用於資料時比較不實用。

建立資料庫主要金鑰時,會利用三重 DES 演算法和使用者提供的密碼來加密主要金鑰。若要啟用主要金鑰的自動解密,就要使用 SMK 來加密此金鑰的複本。這個複本會同時存放在使用它的資料庫和 master 系統資料庫中。

每當 DMK 變更時,也會以無訊息模式更新儲存於 master 系統資料庫中的 DMK 複本。但是,此預設值可以使用 ALTER MASTER KEY 陳述式的 DROP ENCRYPTION BY SERVICE MASTER KEY 選項來加以變更。未以服務主要金鑰加密的 DMK 必須使用 OPEN MASTER KEY 陳述式和密碼來開啟。

管理 SQL Server 和資料庫金鑰

加密金鑰的管理包括建立新的資料庫金鑰、建立伺服器和資料庫金鑰的備份,以及了解還原、刪除或變更金鑰的時機和方法。

若要管理對稱金鑰,您可以使用 SQL Server 所包含的工具執行以下作業:

  • 備份伺服器和資料庫金鑰的複本,讓您能夠使用它們來復原伺服器安裝,或當做計劃移轉的一部分。

  • 將之前儲存的金鑰還原至資料庫。如此可讓新的伺服器執行個體存取它原先未加密的現有資料。

  • 當發生無法再存取加密資料的罕見事件中,刪除資料庫中的加密資料。

  • 在金鑰受到危害的罕見事件中,重新建立金鑰並重新加密資料。就安全性最佳作法而言,您應定期重新建立金鑰 (例如,每隔幾個月),以保護伺服器免於駭客進行破解金鑰的攻擊。

  • 在伺服器向外延展部署中加入或移除伺服器執行個體,其中多部伺服器會共用單一資料庫以及能加解密該資料庫的金鑰。

重要安全性資訊

存取由服務主要金鑰維護安全的物件需要之前用來建立此金鑰的 SQL Server 服務帳戶或是電腦帳戶。也就是說,電腦會與金鑰建立所在的系統繫結在一起。您可以變更 SQL Server 服務帳戶電腦帳戶,而不會遺失對此金鑰的存取權。但是,如果您變更這兩者,您將會遺失對服務主要金鑰的存取權。如果您在沒有這兩個元素之其中一個的情況下遺失對服務主要金鑰的存取權,您將無法使用原始金鑰來解密資料和物件。

以服務主要金鑰維護安全的連接一定要有服務主要金鑰,才能進行還原。

當存取以資料庫主要金鑰維護安全的物件和資料時,只需要用來維護此金鑰安全的密碼。

警告注意事項注意

如果您遺失對上述金鑰的所有存取權,您也會遺失用這些金鑰維護安全之物件、連接和資料的存取權。您可以還原服務主要金鑰 (如這裡所顯示的連結中所述),或者回到原始加密系統來復原存取。並沒有其他「捷徑」可復原存取。

本節內容