只读访问执行 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?的主要内容,如果未能解决你的问题,请参考以下文章

DateReader读取数据

如何从列数未知的存储过程中查看 Toad 中结果集的内容?

ExecuteReader()获得数据

mongodb基础学习6

使用只读用户访问 SQL Server 主数据库中的系统视图

Redshift 间接权限