用户安全拒绝存储过程数据修改

我想要一个简单的方法来在我的数据库上创build一个只读的用户。 用户只有在不修改数据的情况下才有权执行存储过程。 我不想弄清哪些存储过程是只读的,并给予权限的方式,因为有太多可以通过。

我认为这是可能的后阅读以下内容:

“一个存储过程可能需要存储过程的EXECUTE权限和多个存储过程引用的表上的INSERT权限”。 – http://technet.microsoft.com/en-us/library/ms191291.aspx

不幸的是,我能够执行一个“可执行的”存储过程,将其插入“只读”用户表中。

对MSDN的评论仅仅意味着在某些情况下(比如有时使用dynamicSQL),在存储过程中授予用户EXECUTE不一定足以让他们执行它。

你想要的东西不能做 – 如果他们能够运行一个存储过程,他们将能够做任何存储过程 – INSERT,DELETE,UPDATE等等。 即使SELECT也可以通过SELECT INTO进行更改。 而且总是有临时表格或表格variables,使得任何识别安全/不安全sps的尝试变得复杂。

我的build议是尽可能缩小只读用户应该实际需要读取的内容,创build一个具有EXECUTE权限的数据库angular色,然后从那里开始。 我希望你没有给予公共angular色的EXECUTE权限,因为如果是这样的话,你还必须在所有其他存储过程上进行拒绝执行。

不幸的是(据我所知)没有办法做到这一点。 给用户(即使是只读用户)执行存储过程的能力意味着他们将能够执行该存储过程中的任何内容。