使用“执行”的SQL Server运行脚本会导致权限错误

时间:2015-11-05 18:24:39

标签: sql-server tsql

我有一个存储过程,我们在这里称之为Test

为简单起见,我将SP代码修改为:

Select * from table A

我可以毫无问题地运行此SP。

现在,如果我使用动态SQL

@SQL='Select * from table A'

EXECUTE (@SQL)

I get 
The SELECT permission was denied on the object 'A', database 'MyDb', schema 'dbo'.

这里有什么不同?

2 个答案:

答案 0 :(得分:4)

动态SQL具有此限制/限制。在存储过程中使用动态sql时,即使调用用户对存储过程具有权限,用户也需要对动态sql中调用的表/对象的权限。

您有两个选择

  1. 根本不要使用Dynamic sql。
  2. 为动态sql中正在使用的表授予调用用户权限。

答案 1 :(得分:0)

  

当用户没有足够的权限时会出现此错误   访问数据库中的表。授予权限   用户为了得到你想要的东西。

Grant Select statement(or any other if you want)的权限。