sp_control_dbmasterkey_password (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

新增或卸載包含開啟資料庫主要金鑰所需密碼的認證。

Transact-SQL 語法慣例

語法

  
sp_control_dbmasterkey_password @db_name = 'database_name,  
     @password = 'master_key_password' , @action = { 'add' | 'drop' }  

引數

@db_name=N' database_name '
指定與此認證相關聯的資料庫名稱。 不能是系統資料庫。 database_name Nvarchar

@password=N' password '
指定主要金鑰的密碼。 password Nvarchar

@action=N'add'
指定將指定資料庫的認證新增至認證存放區。 認證將包含資料庫主要金鑰的密碼。 傳遞至 @action 的值是 Nvarchar

@action=N'drop'
指定將從認證存放區卸載指定資料庫的認證。 傳遞至 @action 的值是 Nvarchar

備註

當 SQL Server 需要資料庫主要金鑰來解密或加密金鑰時,SQL Server 會嘗試使用 實例的服務主要金鑰來解密資料庫主要金鑰。 如果解密失敗,SQL Server 會搜尋認證存放區中的主要金鑰認證,其主要金鑰認證與需要主要金鑰的資料庫相同。 SQL Server 會嘗試利用每個相符的認證來將資料庫主要金鑰解密,直到解密成功或沒有其他認證為止。

警告

請勿為必須無法存取 sa 和其他高許可權伺服器主體的資料庫建立主要金鑰認證。 您可以將資料庫設為不能由服務主要金鑰解密它的金鑰階層。 此選項支援為資料庫深度防禦,其中包含無法存取 sa 或其他高度特殊許可權伺服器主體的加密資訊。 為這類資料庫建立主要金鑰認證會移除此深度防禦,讓 sa 和其他具有高度許可權的伺服器主體解密資料庫。

使用 sp_control_dbmasterkey_password 建立的認證會顯示在sys.master_key_passwords 目錄檢視中 。 針對資料庫主要金鑰建立的認證名稱具有下列格式: ##DBMKEY_<database_family_guid>_<random_password_guid>## 。 密碼會儲存為認證密碼。 針對每個新增至認證存放區的密碼,sys.credentials 中有一個資料列。

您無法使用sp_control_dbmasterkey_password來建立下列系統資料庫的認證:master、model、msdb 或 tempdb。

sp_control_dbmasterkey_password未確認密碼可以開啟指定資料庫的主要金鑰。

如果您指定已儲存在指定資料庫認證的密碼,sp_control_dbmasterkey_password將會失敗。

注意

來自不同伺服器實例的兩個資料庫可以共用相同的系列 GUID。 如果發生這種情況,資料庫會在認證存放區中共用相同的主要金鑰記錄。

傳遞至sp_control_dbmasterkey_password的參數不會出現在追蹤中。

注意

當您使用使用 sp_control_dbmasterkey_password 新增的認證來開啟資料庫主要金鑰時,服務主要金鑰會重新加密資料庫主要金鑰。 如果資料庫處於唯讀模式,重新加密作業將會失敗,而且資料庫主要金鑰會保持未加密狀態。 若要後續存取資料庫主要金鑰,您必須使用 OPEN MASTER KEY 語句和密碼。 若要避免使用密碼,請先建立認證,再將資料庫移至唯讀模式。

潛在的回溯相容性問題: 目前,預存程式不會檢查主要金鑰是否存在。 這可允許回溯相容性,但是會顯示警告。 這個行為已被取代。 在未來版本中,主要金鑰必須存在,而且預存程式中 所使用的密碼sp_control_dbmasterkey_password 必須與用來加密資料庫主要金鑰的其中一個密碼相同。

權限

需要 系統管理員 (sysadmin) 固定伺服器角色中的成員資格。

範例

A. 建立 AdventureWorks 主要金鑰的認證

下列範例會建立資料庫主要金鑰的 AdventureWorks2022 認證,並將主要金鑰密碼儲存為認證中的秘密。 因為傳遞至 sp_control_dbmasterkey_password 的所有參數都必須是資料類型 Nvarchar ,因此文字字串會以轉換運算子 N 轉換。

EXEC sp_control_dbmasterkey_password @db_name = N'AdventureWorks2022',   
    @password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4', @action = N'add';  
GO  

B. 卸載資料庫主要金鑰的認證

下列範例會移除範例 A 中建立的認證。請注意,所有參數都是必要參數,包括密碼。

EXEC sp_control_dbmasterkey_password @db_name = N'AdventureWorks2022',   
    @password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4', @action = N'drop';  
GO  

另請參閱

設定加密鏡像資料庫
安全性預存程序 (Transact-SQL)
系統預存程序 (Transact-SQL)
sys.credentials (Transact-SQL)
認證 (Database Engine)