只读访问执行 SP/get 结果集的角色,无需间接修改 db?
Posted
技术标签:
【中文标题】只读访问执行 SP/get 结果集的角色,无需间接修改 db?【英文标题】:Role for read-only access to execute SP/get result set, without indirectly modifying db? 【发布时间】:2011-07-16 20:15:16 【问题描述】:例如
如果给定了 SQL Server 用户帐户 只有 DataReader 角色和执行一个存储的能力 修改某些数据的过程 方式,应该执行那个 该用户引起的存储过程 修改发生?
总体而言,我想为一个用户提供对整个数据库的只读权限,包括使用 SQL 语法、视图以及执行任何返回结果集的存储过程。但我不希望任何副作用导致数据库发生变化。因此,在前面提到的存储过程示例中,理想情况下,尝试会出错以满足我的要求,以及副作用可能导致更改的所有类似情况。我想确保我的数据库受到保护。
这仅在角色级别上可行吗?
产品:SQL Server 2005 及更高版本
【问题讨论】:
【参考方案1】:当然可以。只需在数据库级别创建一个数据库角色,并授予该角色读取表并仅在您想要的存储过程(即读取的那些)上执行。然后,将所需的用户添加到您的数据库角色中。
但是,考虑到所有事情,如果您使用存储过程来读取数据,请完全这样做,并且不要为任何级别的用户授予对表的读取权限。通过存储过程(和视图)驱动所有数据访问。
编辑:刚刚注意到您说 SQL 2005“及更高版本”。如果您使用的是 SQL Server 2008,请查看应用程序角色而不是传统的数据库角色。
【讨论】:
以上是关于只读访问执行 SP/get 结果集的角色,无需间接修改 db?的主要内容,如果未能解决你的问题,请参考以下文章