sp_control_dbmasterkey_password (Transact-SQL)
適用於:SQL ServerAzure 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)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應