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


9

TRUSTWORTHY如果您不小心,该设置可能会非常危险,除特殊情况外,建议保持关闭状态。但是默认情况下,MSDB数据库TRUSTWORHTY设置ON默认。我很好奇为什么?

我已经在BOL中阅读了此条目

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

但是我对细节感到好奇。为什么MSDB需要专门TRUSTWORTHY打开电源?它使用什么功能?


2
无需进行WHY研究就可以快速想到,SQL Agent服务可以与实例上的所有DB进行交互,以将DB邮件用于通知和其他外部资源。SQL代理作业中的路径,AD对象等。
Pimp Juice IT

1
@JUICED_IT还包括SQL Agent作业历史记录,日志传送监视器历史记录,SSIS包,数据库引擎优化顾问数据和Service Broker队列数据,以及备份信息。您需要很多标准行为。 sqlperformance.com/2015/07/sql-maintenance/msdb
ConstantineK

我怀疑使用跨数据库调用的任何内容都需要它。您应该关闭TRUSTWORTHYmsdb查看停止工作的内容,并且至少会得到部分答案:)。我认为BACKUP会有问题,但我只是尝试了一下,就成功了。
所罗门·

Answers:


3

msdbmaster数据库中有许多对象。

如果未将msdb标记为TRUSTWORTHY,则用户将需要权限来访问msdb与之交互的master对象以及被引用的对象。

例如,通过SQLAgentUserRole数据库角色获得权限的msdb用户被授予execute on 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。但是,既未记录也未支持这些必需的权限。


您可能是对的,但如果是这样,则MSDB的所有者拥有这些权限同样重要。
肯尼斯·费舍尔

@KennethFisher大概吗?我通常不会与msdb的数据库所有者混淆,所以我不确定。我一直把它当作sa。我完全没有想到这一点。
AMtwo

嗯,但是,如果我在MSDB中拥有正确的权限,则可以将该sa访问权限与TRUSTWORTHY结合使用来接管您的服务器:)
Kenneth Fisher

真正。但这就是为什么应该谨慎限制对系统DB的访问。如果您不是DBA,则无需进入系统数据库。
AMtwo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.