通过链接服务器的嵌套视图会拒绝选择权限

时间:2012-10-23 02:56:35

标签: tsql sql-server-2008-r2 linked-server

我遇到了嵌套视图的一个有趣的权限问题,我认为这不是由所有权链引起的。提到的所有服务器都是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,但存储过程失败。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

该角色具有从[ViewA]中进行选择的权限,但您尚未确认存储过程的权限。您很可能需要运行类似于以下内容的内容:

GRANT EXECUTE ON [InsertProcedureNameHere] TO [InsertRoleNameHere];

有关GRANT声明的更多信息,请访问: GRANT object