SQL 2008 R2 - 如何授予存储过程访问对表的读访问权限

时间:2011-10-04 23:07:39

标签: sql-server-2005 sql-server-2008

我希望授予存储过程对SQL Server 2008 R2中表的读访问权

然后,我将授予用户访问存储过程的权限,而不是表本身。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

Grant EXEC access到单个存储过程,对表没有权限。

Grant EXECUTE On [SpName] To [Principal]

没有对存储过程的表的读取权限这样的概念。存储过程权限与其他对象分开。如果用户有权运行存储过程,则无论它做什么,他们都可以运行它,即使他们没有对基础对象的权限。

答案 1 :(得分:1)

以下文章详细介绍了使用存储过程授予权限的几种不同方法。这绝对值得一读。

http://www.sommarskog.se/grantperm.html

大多数情况下,ownership chaining会处理权限问题。只要存储过程和基础表具有相同的所有者,用户只需要EXECUTE存储过程的权限。

在对another answer的评论中,您提到存储过程与表中的数据库不同。您可以将module signing视为仅允许通过存储过程进行访问的方法。如果可能,另一种替代方法是在与表相同的数据库中创建存储过程,然后向其他数据库中的用户授予访问权限。这样,所有权链接就会生效。