由于表的权限,sql存储过程执行失败

时间:2010-06-23 11:46:09

标签: sql-server permissions

让我先解释一下背景。

在同一网络上的两个不同服务器上有两个数据库。有一个存储过程将数据从一个数据库中的表复制到另一个数据库中的表(这两个数据库具有相同的结构,但包含不同的数据)。用户没有权限直接查询表(除非他们的角色允许他们这样做),只能通过存储过程。

现在问题。

当用户执行存储过程时,它无法给出错误消息,即插入语句的目标表上的权限不允许用户访问它。但是,由于用户有权执行存储过程,这应该不会受到影响,是吗?

摘录形式msdn文档:

“存储过程利用所有权链接来提供对数据的访问,这样用户就不需要具有访问数据库对象的显式权限。当按顺序访问的对象由同一用户拥有时,存在所有权链。例如,存储过程可以调用其他存储过程,或者存储过程可以访问多个表。如果执行链中的所有对象具有相同的所有者,则SQL Server仅检查调用者的EXECUTE权限,而不是调用者的权限。因此,您只需要对存储过程授予EXECUTE权限;您可以撤消或拒绝对基础表的所有权限。“

为什么执行失败呢?所有表都拥有相同的所有者。

2 个答案:

答案 0 :(得分:1)

您是否在程序中使用“OpenQuery”?尝试使用包括链接服务器在内的完全限定名称。

INSERT INTO Linked_Server.Database.schema.table_name 选择.............

答案 1 :(得分:0)

您拥有的存储过程会将数据插入两台服务器上的表中。您使用的是链接服务器吗?如果您使用链接服务器,用户是否有权通过链接服务器插入表中以及是否具有执行存储过程的权限?