sp_control_dbmasterkey_password (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 的參數不會出現在追蹤中。
權限
需要資料庫的 CONTROL 權限。
範例
A. 建立 AdventureWorks 主要金鑰的認證
下列範例會建立 AdventureWorks
資料庫主要金鑰的認證,並將主要金鑰密碼儲存為認證中的秘密。因為傳遞至 sp_control_dbmasterkey_password
的所有參數都必須屬於資料類型 nvarchar,所以必須利用轉換運算子 N
來轉換字串。
EXEC sp_control_dbmasterkey_password @db_name = N'AdventureWorks',
@password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4', @action = N'add';
GO
B. 卸除資料庫主要金鑰的認證
下列範例會移除範例 A 中建立的認證。請注意,所有參數都需要,包括密碼。
EXEC sp_control_dbmasterkey_password @db_name = N'AdventureWorks',
@password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4', @action = N'drop';
GO
請參閱
參考
安全性預存程序 (Transact-SQL)
系統預存程序 (Transact-SQL)
sys.credentials (Transact-SQL)