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 のマスタ キー資格情報が検索されます。次に、一致した資格情報を順に使用してデータベースのマスタ キーの暗号化解除が試行されます。これは暗号化解除が成功するか、資格情報がなくなった時点で終了します。
注意 : |
---|
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 に渡されるパラメータは、トレースには表示されません。
権限
データベースに対する 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)