我遇到了嵌套视图的一个有趣的权限问题,我认为这不是由所有权链引起的。提到的所有服务器都是SQL Server 2008 R2。
我有一个配置为使用特定登录名的链接服务器,比如Bill。在我的远程服务器上,我有一个视图,让我们称之为ViewA
,然后从另一个视图中选择,让我们称之为ViewB
。
我可以通过链接服务器进行选择,它可以正常工作:
SELECT * FROM [LINKEDSERVER].[DATABASE].[SCHEMA].[VIEWA]
这会返回一个快乐的结果集,没问题。
现在,我有一个尝试从同一视图查询的存储过程。它使用相同的链接服务器,请记住,它使用相同的登录名Bill。
当我EXECUTE
通过管理工作室存储过程,然后通过链接服务器查询ViewA
时,我得到:
ViewB上的SELECT权限被拒绝。
链接服务器正在使用的登录名Bill是具有View A
显式访问权限的角色的一部分。两个视图都是同一模式的一部分,所有对象都由dbo拥有。
请注意,它没有抱怨ViewA
,Bill有明确的权利,但是ViewB
,Bill因为所有权链而应该拥有哪些权利。
我不明白为什么我可以直接查询Bill Linked Server,但存储过程失败。
有什么想法吗?
答案 0 :(得分:0)
该角色具有从[ViewA]
中进行选择的权限,但您尚未确认存储过程的权限。您很可能需要运行类似于以下内容的内容:
GRANT EXECUTE ON [InsertProcedureNameHere] TO [InsertRoleNameHere];
有关GRANT声明的更多信息,请访问: GRANT object