在视图上授予更新,但无法更新基础表,为什么?

时间:2013-08-16 12:33:21

标签: sql-server sql-server-2008 sql-server-2008-r2

我有一张桌子和一个视图。它们处于不同的架构中,但具有相同的所有者:

  • 根据sys.objects:principal_ID = null,schema_ID是1和4
  • 根据sys.schemas:两个模式具有相同的principal_id(1 = dbo)

视图只是select a,b,c from table

现在,用户已获得从视图中选择,插入,更新和删除行的权限。他对基础表没有任何权利。

实际上,用户可以选择数据。但如果他想要改变任何东西,我们会得到两个错误:'没有在表上授予SELECT“和”没有在表上授予UPDATE“。

这里出了什么问题?

2 个答案:

答案 0 :(得分:2)

如果您同时授予表的权限,则可更新的视图也是可更新的:

  

需要对目标表执行UPDATE,INSERT或DELETE权限,具体取决于正在执行的操作。

请参阅TechNet文章Modify Data Through a View

答案 1 :(得分:0)

解决方案是我使用C#SqlCommandBuilder类访问视图。但我不知道的是,CommandBuilder试图“智能化”并分析视图。然后它创建了访问基础表而不是视图的语句。唯一的解决方案是绕过SqlCommandBuilder。

今年我也遇到了这个问题,这里是另一个链接: https://stackoverflow.com/a/31231563/2504785