我有一张桌子和一个视图。它们处于不同的架构中,但具有相同的所有者:
视图只是select a,b,c from table
现在,用户已获得从视图中选择,插入,更新和删除行的权限。他对基础表没有任何权利。
实际上,用户可以选择数据。但如果他想要改变任何东西,我们会得到两个错误:'没有在表上授予SELECT“和”没有在表上授予UPDATE“。
这里出了什么问题?
答案 0 :(得分:2)
如果您同时授予表的权限,则可更新的视图也是可更新的:
需要对目标表执行UPDATE,INSERT或DELETE权限,具体取决于正在执行的操作。
请参阅TechNet文章Modify Data Through a View。
答案 1 :(得分:0)
解决方案是我使用C#SqlCommandBuilder
类访问视图。但我不知道的是,CommandBuilder试图“智能化”并分析视图。然后它创建了访问基础表而不是视图的语句。唯一的解决方案是绕过SqlCommandBuilder。
今年我也遇到了这个问题,这里是另一个链接: https://stackoverflow.com/a/31231563/2504785