存储过程中的动态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