动态查询在存储过程中运行的权限问题

时间:2011-04-07 12:09:45

标签: sql sql-server-2008 permissions

我有这个存储过程,使用几个内部联接进行选择查询(其中一个表位于另一个数据库中)。现在,我必须将此查询编写为动态原因首先我必须找到选择查询应运行的db。无论如何,没有一个表对它们有权限,只是授予数据库角色“personel”(包括每个人)的存储过程的权限。

但是现在,具有personel角色的人运行此存储过程,他们收到错误“对象'tbl_table',数据库'Db',架构'dbo'上的SELECT权限被拒绝。”模式没有区别,并且还有其他使用同一个表正常运行的过程。

可以使用动态查询(exec(使用DB;选择...))吗?就像它是动态的一样,我也应该赋予表权限吗?

由于

2 个答案:

答案 0 :(得分:1)

是的,这可能就是原因。阅读this以获得解释和可能的解决方案。

答案 1 :(得分:1)

简短的回答是肯定的。

编译存储过程时,将检查创建存储过程的用户/登录的权限。当其他人执行它时,他们阅读这些表的能力不再相关(在大多数情况下),而只是他们执行SP的能力。

但是,在执行动态代码时,必须在那里检查有关表的权限。这意味着正在检查正在执行的用户的权限。

相关问题