SQL Server使用Execute运行脚本会导致权限错误



我有一个存储过程,我们在这里称它为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'.

这里有什么不同?

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

你有两个选项

  1. 根本不要使用动态sql
  2. 赋予调用用户对动态sql中正在使用的表的权限

当用户没有足够的权限时会出现此错误访问数据库中的表。请将特权授予用户,以便获得您想要的内容。

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

最新更新