日期:2014-05-18  浏览次数:20372 次

存储过程中的动态SQL的表的权限问题。
某存储过程   SP_Test,对表TA_20070919有Update操作,这个操作是通过动态SQL来玩成的。
Create   Proc   SP_Test  
as
begin
      declare   @SQL   varchar(3000)
      Update   TA_20070919   set   Fa   =   Fa   +1  
      set   @SQL   = 'Update   TA '   +   convert(varchar(12),getdate())   +   '   set   Fa   =   Fa   +1   '  
      exec(@SQL)

end

现在用用户A执行,用户A对SP_Test有Excute   权限,对表TA_20070919没有任何权限。
执行的结果是第一条Update语句执行成功,第二条Update语句执行失败,原因是没有表TA_20070919的Update   权限。

问题:1,为什么出现这种情况。
            2,除了给表赋权限外,怎么样才能让动态SQL也能有权限执行?

高手请指点一下,非常感谢!


------解决方案--------------------
Create Proc SP_Test
with Execute as self --以创建者的身份执行
as
begin
declare @SQL varchar(3000)
Update TA_20070919 set Fa = Fa +1
set @SQL = 'Update TA ' + convert(varchar(12),getdate()) + ' set Fa = Fa +1 '
exec(@SQL)

end