【发布时间】:2011-04-18 12:11:00
【问题描述】:
我有一个数据库,其中所有访问都由存储过程控制。 DBA 希望避免让用户直接读/写访问基础表,我可以理解。因此,所有数据的更新和选择都是通过存储过程完成的。基本上,他创建了一个角色,该角色对数据库中的所有存储过程具有 EXECUTE 权限,并赋予用户该角色。
问题是其中一个存储过程动态构建了一个 SQl Query 并通过“Execute sp_Executesql”执行它。无需详细说明,查询是动态构建的,因为它会根据许多用户输入参数而发生显着变化。有问题的存储过程只是一个 SELECT sql 语句,但是我发现仅授予存储过程 EXECUTE 权限是不够的。存储过程中引用的使用“Execute sp_Executesql”的基础表需要被授予“datareader”访问权限,否则存储过程将失败。
关于如何纠正这个问题的任何想法?我真的想限制对表的访问仅限于存储过程,但我需要找到一种方法来解决使用“Execute sp_Executesq”l 的存储过程。谢谢。
【问题讨论】:
-
你可能会得到更好的 avdice serverfault。我的建议 - 与 dba 交谈并解释情况。与他们合作以获得正确的权限。
标签: sql sql-server permissions dynamic-sql sp-executesql