共用方式為


sp_control_dbmasterkey_password (Transact-SQL)

適用於:SQL Server Azure SQL 受控執行個體

新增或卸除認證,其中包含開啟資料庫主要密鑰 (DMK) 所需的密碼。

Transact-SQL 語法慣例

語法

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

引數

@db_name= N'db_name'

指定與此認證相關聯的資料庫名稱。 不能是系統資料庫。 @db_name為 nvarchar

@password= N'password'

指定 DMK 的密碼。 @password為 nvarchar

@action = { N'add' |N'drop' }

指定認證存放區中指定資料庫之認證的動作。 傳遞至@action的值是 nvarchar

動作 描述
add 指定將指定資料庫的認證新增至認證存放區。 認證包含 DMK 的密碼。
drop 指定將從認證存放區卸除指定資料庫的認證。

備註

當 SQL Server 需要 DMK 來解密或加密金鑰時,SQL Server 會嘗試使用 實例的服務主要金鑰 (SMK) 來解密 DMK。 如果解密失敗,SQL Server 會搜尋認證存放區,以取得與它需要密鑰的資料庫具有相同系列 GUID 的認證。 然後,SQL Server 會嘗試使用每個相符認證來解密 DMK,直到解密成功或沒有其他認證為止。

警告

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

使用 sp_control_dbmasterkey_password 建立的認證會顯示在sys.master_key_passwords目錄檢視中。 為 DMK 建立的認證名稱具有下列格式: ##DBMKEY_<database_family_guid>_<random_password_guid>##。 密碼會儲存為認證密碼。 新增至認證存放區的每個密碼在 中 sys.credentials都有相符的數據列。

您無法使用 sp_control_dbmasterkey_password 建立下列系統資料庫的認證: mastermodelmsdbtempdb

sp_control_dbmasterkey_password 不會確認密碼可以開啟指定資料庫的 DMK。

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

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

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

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

潛在的回溯相容性問題

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

權限

需要系統管理員固定伺服器角色的成員資格,或直接在此預存程式上執行許可權。

範例

本文 Transact-SQL 程式碼範例使用 AdventureWorks2022AdventureWorksDW2022 範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。

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

下列範例會建立 DMK 的 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