注意しないと、TRUSTWORTHY
設定はかなり危険になる可能性があり、特定の状況を除いて、オフにすることをお勧めします。ただし、デフォルトでは、MSDB
データベースにはデフォルトでTRUSTWORHTY
セットON
があります。なぜだろう?
[〜#〜] bol [〜#〜] でこのエントリを読みました
注デフォルトでは、MSDBデータベースのTRUSTWORTHY設定はONに設定されています。この設定をデフォルト値から変更すると、MSDBデータベースを使用するSQL Serverコンポーネントで予期しない動作が発生する可能性があります。
しかし、私は詳細に興味があります。なぜMSDB
はTRUSTWORTHY
をオンにする必要があるのですか?どの機能がそれを使用しますか?
msdb
データベースを参照するmaster
には数十のオブジェクトがあります。
MsdbがTRUSTWORTHY
としてマークされていない場合、ユーザーは、対話しているmsdb
オブジェクトと参照されているmaster
オブジェクトの両方に対する権限が必要になります。
たとえば、SQLAgentUserRoleデータベースロールを介して権限を取得するmsdbユーザーには、msdb.dbo.sp_enum_sqlagent_subsystems
に対する実行権限が付与されます。そのプロシージャのコールスタックは最終的にmaster
をヒットします。
* msdb.dbo.sp_enum_sqlagent_subsystems
* msdb.dbo.sp_enum_sqlagent_subsystems_internal
* master.dbo.xp_instance_regread
msdb
がTRUSTWORTHY
としてマークされていない場合、SQLAgentUserRoleデータベースロールの一部であるユーザーは、master.dbo.xp_instance_regread
に対する実行権限も必要になります。
技術的には、TRUSTWORTHY
のmsdb
設定を削除して、代わりにmaster
に特定の権限を付与することが可能です。ただし、これらの必要な権限は文書化もサポートもされていません。