我在 SQL Server 2016 中运行漏洞评估报告并收到此问题
VA1102 应在除 MSDB 之外的所有数据库上禁用 Trustworthy 位
在我的情况下将 Trustworthy 设置为 ON 的原因是数据库的 DB Owner 必须有权访问不同的数据库才能读取数据(特别是存储过程作为所有者执行并从另一个数据库读取数据)。
我的问题是如何在不设置可信任的情况下实现相同的目标,这可能会使服务器暴露于漏洞?
我在 SQL Server 2016 中运行漏洞评估报告并收到此问题
VA1102 应在除 MSDB 之外的所有数据库上禁用 Trustworthy 位
在我的情况下将 Trustworthy 设置为 ON 的原因是数据库的 DB Owner 必须有权访问不同的数据库才能读取数据(特别是存储过程作为所有者执行并从另一个数据库读取数据)。
我的问题是如何在不设置可信任的情况下实现相同的目标,这可能会使服务器暴露于漏洞?
那是真实的。
那不是真的。
幸运的是,这非常简单,几乎没有不便? 感谢模块签名。您需要做的就是:
而已!当然,这确实假设您没有在您的 proc / function / trigger 定义中使用
WITH EXECUTE AS ...
,因为这确实使事情变得有点复杂(我将很快在您的相关问题中解决这个问题)。但是,这个假设应该没问题,因为说明需要它的原因(为了在另一个 DB 上具有读取访问权限)在这一点上不是问题,因为模块签名会处理这个问题。请参阅下面的演示,它大量借鉴了您在相关问题中发布的复制代码(为了保持一致性)
最初设定
测试
设置模块签名
再次测试
有关模块签名的更多信息,请参阅我的网站:
https ://ModuleSigning.Info/