Share via


sp_control_dbmasterkey_password (Transact-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 會從認證存放區中搜尋主要金鑰憑證,而這是含有與它需要其主要金鑰之資料庫相同家族 GUID 的主要金鑰認證。接著,SQL Server 會嘗試利用每個相符的認證來解密資料庫主要金鑰,直到解密成功或沒有其他認證為止。

警告注意事項注意

請勿建立一個不能由 sa 和其他高權限伺服器主體存取之資料庫的主要金鑰認證。您可以將資料庫設為不能由服務主要金鑰解密它的金鑰階層。這個選項可作為特定資料庫的深度防衛,該等資料庫所含加密資訊不應該由 sa 或其他高權限伺服器主體存取。建立這類資料庫的主要金鑰認證會移除這個深度防衛,使 sa 和其他高權限伺服器主體能夠解密資料庫。

您可以在 sys.master_key_passwords 目錄檢視中,看到利用 sp_control_dbmasterkey_password 建立的認證。為資料庫主要金鑰建立的認證名稱採用下列格式:##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 陳述式和密碼。若要避免使用密碼,將資料庫移到唯讀模式之前要先建立認證。

權限

需要資料庫的 CONTROL 權限。

範例

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

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

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

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

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

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