我遇到了一个有趣的嵌套视图权限问题,我认为这不是由所有权链接引起的。提到的所有服务器都是 SQL Server 2008 R2。
我有一个链接服务器,它被配置为使用特定的登录名,比如 Bill。在我的远程服务器上,我有一个视图,我们称之为它ViewA
,它又从另一个视图中选择,我们称之为它ViewB
。
我可以通过链接服务器进行选择,效果很好:
SELECT * FROM [LINKEDSERVER].[DATABASE].[SCHEMA].[VIEWA]
这会返回一个满意的结果集,没问题。
现在,我有一个尝试从同一个视图查询的存储过程。它使用同一个链接服务器,记住,它使用同一个登录名,比尔。
当我EXECUTE
通过管理工作室存储过程时,它又ViewA
通过链接服务器查询,我得到:
ViewB 上的 SELECT 权限被拒绝。
链接服务器正在使用的登录名 Bill 是具有显式访问权限的角色的一部分View A
。两个视图都是同一个模式的一部分,所有对象都归 dbo 所有。
请注意,它不是在抱怨ViewA
Bill 拥有明确的权利,而是抱怨ViewB
由于所有权链接,Bill 应该拥有的权利。
我不明白为什么我可以直接通过Bill Linked Server查询,但是存储过程却失败了。
有任何想法吗?