sp_control_dbmasterkey_password (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

データベース マスター キーを開くために必要なパスワードを含む資格情報を追加または削除します。

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'
マスター キーのパスワードを指定します。 passwordnvarchar です

@action=N'add'
指定したデータベースの資格情報を、資格情報ストアに追加します。 資格情報には、データベース マスター キーのパスワードが含まれます。 渡される @action 値は nvarchar です

@action=N'drop'
指定したデータベースの資格情報を資格情報ストアから削除することを指定します。 渡される @action 値は nvarchar です

解説

SQL Server でキーの暗号化を解除または暗号化するためにデータベース マスター キーが必要な場合、SQL Server はインスタンスのサービス マスター キーを使用してデータベース マスター キーの暗号化を解除しようとします。 暗号化解除に失敗した場合、SQL Server は資格情報ストアで、マスター キーが必要なデータベースと同じファミリ GUID を持つマスター キー資格情報を検索します。 その後、SQL Server は、復号化が成功するか、それ以上資格情報が存在しない限り、一致する資格情報ごとにデータベース マスター キーの暗号化を解除しようとします。

注意

sa やその他の高い特権を持つサーバー プリンシパルにアクセスできないデータベースのマスター キー資格情報を作成しないでください。 データベースのキー階層をサービス マスター キーで暗号化解除できないようにデータベースを構成できます。 このオプションは、sa やその他の高い特権を持つサーバー プリンシパルにアクセスできない暗号化された情報を含むデータベースの多層防御としてサポートされます。 このようなデータベースのマスター キー資格情報を作成すると、この多層防御が削除され、sa やその他の高い特権を持つサーバー プリンシパルがデータベースの暗号化を解除できるようになります。

sp_control_dbmasterkey_passwordを使用して作成された資格情報は、sys.master_key_passwords カタログ ビューに表示されます。 データベース マスター キー用に作成される資格情報の名前の形式は次のとおりです ##DBMKEY_<database_family_guid>_<random_password_guid>##。 パスワードは資格情報シークレットとして格納されます。 sys.credentials には、資格情報ストアに追加されたパスワードごとに 1 行のデータが格納されます。

sp_control_dbmasterkey_password を使用して、システム データベース master、model、msdb、または tempdb の資格情報を作成することはできません。

sp_control_dbmasterkey_password では、指定したデータベースのマスター キーをパスワードで開くことができるかどうかは検証されません。

指定したデータベースの資格情報に既に格納されているパスワードを指定した場合、sp_control_dbmasterkey_password は失敗します。

注意

異なるサーバー インスタンスの 2 つのデータベースで、同じファミリ GUID を共有することができます。 この場合、両方のデータベースの資格情報ストア内で同じマスター キー レコードが共有されます。

sp_control_dbmasterkey_password に渡されるパラメーターは、トレースには表示されません。

注意

sp_control_dbmasterkey_password を使用して追加された資格情報を使ってデータベース マスター キーを開く場合、そのデータベース マスター キーはサービス マスター キーによって再暗号化されます。 データベースが読み取り専用モードの場合、再暗号化操作は失敗し、データベース マスター キーは暗号化されません。 データベース マスター キーへの後続のアクセスには、OPEN MASTER KEY ステートメントとパスワードを使用する必要があります。 パスワードの使用を避けるには、データベースを読み取り専用モードに移行する前に、資格情報を作成するようにしてください。

下位互換性の問題の可能性: 現時点では、ストアド プロシージャはマスター キーが存在するかどうかを確認しません。 これは下位互換性を確保するために許容されていますが、警告が表示されます。 ただし、この動作は非推奨とされます。 今後のリリースでは、マスター キーが存在し、ストアド プロシージャ sp_control_dbmasterkey_password で使用されるパスワードは、データベース マスター キーの暗号化に使用されるパスワードの 1 つと同じである必要があります。

アクセス許可

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)
資格情報 (データベース エンジン)