【发布时间】:2011-07-05 16:07:19
【问题描述】:
什么是动态SQL?
我在一本书中读到,当我们使用动态 SQL 时,SQL 会检查权限。但是当我们不使用它时,就没有权限检查。为什么会这样?
我做了一个存储过程,它更新了一个表。
create proc steve_SP AS update steveTABLE set eid = 2 where ename = 'henry'
steve_SP & steveTABLE 的所有者是 STEVE。
我授予新用户“Bob”执行 steve_SP 的权限,但没有授予 steveTABLE 的任何权限。
现在,当 Bob 执行该过程时,它就会成功执行。
但是,当过程的代码被更改(使用动态 SQL)到下面的代码时。
create proc steve_SP AS EXECUTE (update steveTABLE set eid = 2 where ename = 'henry' )
然后,Bob 执行该过程。这次 steve_SP 的执行失败了。为什么会这样?
【问题讨论】:
-
阅读 Erland Sommarskog 的The curse and blessing of dynamic SQL - 多次!并吸收他出色的专业知识 - 动态 SQL 是一把双刃剑 - 强大且无所不能,但也很棘手和危险。权限问题只是开始.....
标签: sql sql-server sql-server-2005 stored-procedures dynamic-sql