我的公司在不久的将来会转向限制性更强的安全模型。
作为其中的一部分,我们正在将特定服务器更改为新模型并测试我们所有现有的流程。我经常使用的过程之一是利用 SMO 框架按依赖顺序编写数据库对象的脚本,因此我们可以在另一台服务器上运行这些脚本。
依赖顺序非常重要,因为我们有很多嵌套对象(想想引用其他视图的视图)。
使用新的安全模型后,此脚本停止正常工作。
我也在 SSMS 中进行了测试(针对 2008r2 实例的 SSMS 2012),并且View Dependencies
在引用同一数据库中另一个视图的视图上使用不会在Objects on which [this view] depends
.
更麻烦的是,如果我sp_depends
在有问题的视图上运行,我确实会得到一个准确的依赖关系列表。
我做了一些研究,找不到明确的答案,所以我希望有人能帮助我:
用户需要哪些特定权限才能准确查看 SQL Server 2008r2 和/或 SQL Server 2012(我们即将升级)中的依赖项。
2012 年联机丛书主题“获取有关视图的信息”指出此特定任务所需的权限为:
VIEW DEFINITION
数据库权限;和SELECT
对sys.sql_expression_dependencies的权限请注意,需要数据库级别
VIEW DEFINITION
才能允许用户查看sys.sql_expression_dependencies
; 对象级VIEW DEFINITION
和SELECT
DMV 将不起作用(您将收到一个空的结果集)。例子:
关于sp_depends:只需要
public
角色的成员身份,但已弃用: