sp_control_dbmasterkey_password (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
データベース マスター キー (DMK) を開くために必要なパスワードを含む資格情報を追加または削除します。
構文
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
を使用して、master
、model
、msdb
、またはtempdb
のシステム データベースの資格情報を作成することはできません。
sp_control_dbmasterkey_password
は、パスワードが指定されたデータベースの DMK を開くことができることを確認しません。
指定したデータベースの資格情報に既に格納されているパスワードを指定すると、 sp_control_dbmasterkey_password
は失敗します。
異なるサーバー インスタンスの 2 つのデータベースで、同じファミリ GUID を共有することができます。 この場合、データベースは資格情報ストア内の同じ DMK レコードを共有します。
sp_control_dbmasterkey_password
に渡されたパラメーターはトレースに表示されません。
sp_control_dbmasterkey_password
を使用して追加された資格情報を使用して DMK を開くと、DMK は SMK によって再暗号化されます。 データベースが読み取り専用モードの場合、再暗号化操作は失敗し、DMK は暗号化されません。 DMK への後続のアクセスには、 OPEN MASTER KEY
ステートメントとパスワードを使用する必要があります。 パスワードの使用を避けるには、データベースを読み取り専用モードに移行する前に、資格情報を作成するようにしてください。
下位互換性の問題の可能性
現時点では、ストアド プロシージャはキーが存在するかどうかを確認しません。 この機能は下位互換性のために許可されていますが、警告が表示されます。 ただし、この動作は非推奨とされます。 今後のリリースでは、キーが存在し、ストアド プロシージャ sp_control_dbmasterkey_password
で使用されるパスワードは、DMK の暗号化に使用されるパスワードの 1 つと同じである必要があります。
アクセス許可
sysadmin固定サーバー ロールのメンバーシップが必要です。または、このストアド プロシージャに対して直接アクセス許可を実行する必要があります。
例
この記事の Transact-SQL コード サンプルは AdventureWorks2022
または AdventureWorksDW2022
サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。
A. AdventureWorks マスター キーの資格情報を作成する
次の例では、 AdventureWorks2022
DMK の資格情報を作成し、マスター キーのパスワードをシークレットとして資格情報に保存します。 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