3

我有一张桌子和一个视图。它们在不同的模式中,但具有相同的所有者:

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

观点很简单select a,b,c from table

现在用户被赋予了从视图中选择、插入、更新和删除行的权利。他对基础表没有任何权利。

事实上,用户可以选择数据。但是,如果他想更改任何内容,我们会收到两个错误:“未授予表上的 SELECT”和“未授予表上的 UPDATE”。

这里出了什么问题?

4

2 回答 2

2

仅当您也授予表的权限时,可更新视图才可更新:

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

请参阅 TechNet 文章通过视图修改数据

于 2013-11-12T01:13:30.833 回答
0

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

今年我也偶然发现了这个问题,这是另一个链接: https ://stackoverflow.com/a/31231563/2504785

于 2015-10-24T23:03:52.827 回答