只读访问执行SP / get结果集的角色,而不间接修改db?

时间:2011-03-16 18:27:52

标签: sql-server sql-server-2005 security permissions roles

例如

  

如果给出了SQL Server用户帐户    DataReader角色和执行一个存储的能力   修改某些数据的过程   应该执行的方式   该用户原因导致的存储过程   修改发生了吗?

总体,我想给一个用户只有整个数据库的读取能力,包括使用SQL语法,视图和执行返回结果集的任何存储过程。但我不希望任何副作用导致数据库发生变化。因此,在前面提到的存储过程示例中,理想情况下尝试会出错以满足我的要求,以及副作用可能导致更改的所有类似场景。我想确保我的数据库受到保护。

这只是在角色级别可行吗?

产品:SQL Server 2005及更高版本

1 个答案:

答案 0 :(得分:0)

当然可以这样做。只需在数据库级别创建一个数据库角色,并授予该角色读取表,并仅在您想要的存储过程(即读取的存储过程)上执行。然后,将所需的用户添加到您的数据库角色。

但是,考虑到所有事情,如果您使用存储过程来读取数据,则完全这样做,并且不为任何级别的用户授予对表的读取权限。通过存储过程(和视图)驱动所有数据访问。

编辑:刚刚注意到你说SQL 2005“及以上。”如果您使用的是SQL Server 2008,请查看应用程序角色而不是传统的数据库角色。