1

我遇到了一个有趣的嵌套视图权限问题,我认为这不是由所有权链接引起的。提到的所有服务器都是 SQL Server 2008 R2。

我有一个链接服务器,它被配置为使用特定的登录名,比如 Bill。在我的远程服务器上,我有一个视图,我们称之为它ViewA,它又从另一个视图中选择,我们称之为它ViewB

我可以通过链接服务器进行选择,效果很好:

SELECT * FROM [LINKEDSERVER].[DATABASE].[SCHEMA].[VIEWA]

这会返回一个满意的结果集,没问题。

现在,我有一个尝试从同一个视图查询的存储过程。它使用同一个链接服务器,记住,它使用同一个登录名,比尔。

当我EXECUTE通过管理工作室存储过程时,它又ViewA通过链接服务器查询,我得到:

ViewB 上的 SELECT 权限被拒绝。

链接服务器正在使用的登录名 Bill 是具有显式访问权限的角色的一部分View A。两个视图都是同一个模式的一部分,所有对象都归 dbo 所有。

请注意,它不是在抱怨ViewABill 拥有明确的权利,而是抱怨ViewB由于所有权链接,Bill 应该拥有的权利。

我不明白为什么我可以直接通过Bill Linked Server查询,但是存储过程却失败了。

有任何想法吗?

4

1 回答 1

0

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

GRANT EXECUTE ON [InsertProcedureNameHere] TO [InsertRoleNameHere];

可以在此处找到有关 GRANT 语句的更多信息: GRANT object

于 2015-06-23T14:30:35.863 回答