为什么 MSDB 数据库值得信赖?

Ken*_*her 9 security sql-server sql-server-2008-r2 sql-server-2012 sql-server-2014

TRUSTWORTHY如果您不小心,该设置可能会相当危险,除特定情况外,建议将其关闭。但是默认情况下,MSDB数据库TRUSTWORHTY设置ON默认。我很好奇为什么?

我已阅读BOL 中的此条目

注意默认情况下,MSDB 数据库的 TRUSTWORTHY 设置设置为 ON。更改此设置的默认值可能会导致使用 M​​SDB 数据库的 SQL Server 组件出现意外行为。

但我对具体情况很好奇。为什么具体MSDB需要TRUSTWORTHY开启?什么功能使用它?

AMt*_*two 3

其中有数十个对象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
Run Code Online (Sandbox Code Playgroud)

如果msdb未标记为TRUSTWORTHY,则属于 SQLAgentUserRole 数据库角色的用户还需要执行权限master.dbo.xp_instance_regread

从技术上讲,可能可以删除TRUSTWORTHY中的设置msdb并在 中授予特定权限master。但是,这些所需的权限既没有记录也没有支持。