【发布时间】:2017-03-08 07:32:56
【问题描述】:
先决条件:
假设我有 2 张桌子。
表 A 包含 A、B 和 C 列。
包含 A、B 和 C 列的表 B。
我还有一个存储过程来更新两个表 我有一个简单的视图来连接表格。
我也有一个用户,我们就叫他……“Bob”。
问题:
现在;
我希望“Bob”只能访问视图和存储过程。 “Bob”无法读取/写入任一表,只能读取视图和存储过程。
我将如何实现这一目标?
【问题讨论】:
-
您授予对存储过程的执行权限,对视图的选择权限,并拒绝对表的所有权限。我没有 sql server 来检查这个,但它应该是这样的
-
@ZoharPeled 这不起作用。你会得到一个例外,说在桌子上缺少读/写。 - 这正是我问这个问题的原因:)
-
这是解决您问题的关键:msdn.microsoft.com/en-us/library/ms188354.aspx(存储过程代码中的 EXECUTE AS 子句)。基本上,您可以让它以存储过程的所有者身份执行(我假设它对基础表具有权限)。
-
@MK_ 我猜以上内容不适用于视图?
-
对于视图,您只需授予视图的 SELECT 权限,即使不授予底层对象权限,用户也应该能够从视图中选择(而不能从底层表中选择) /views)。
标签: sql-server sql-server-2008 stored-procedures view permissions