在SQL Server中查看GRANT DML权限的目的是什么?

时间:2016-04-06 15:42:38

标签: sql-server permissions

在SQL Server 2005中,可以授予视图的一些权限 - 我不明白这个概念。

SELECTREFERENCE权利显而易见,但我对INSERTDELETEUPDATE感到困惑。我确信他们在那里是有原因的,但我没有看到它。

也许这些权利会传播到视图引用的表中?

1 个答案:

答案 0 :(得分:1)

尽管有名称,但SQL Server中的视图可以更新。释义the documentation(“可更新视图”部分“)

  

只要满足以下条件,您就可以通过视图修改基础基表的数据:

     
      
  • 任何修改,包括UPDATE,INSERT和DELETE语句,
      必须仅从一个基表引用列。

  •   
  • 视图中要修改的列必须直接引用表列中的基础数据。列不能是
      以任何其他方式衍生,例如通过以下方式:

  •   
  • 聚合函数:AVG,COUNT,SUM,MIN,MAX,GROUPING,STDEV,STDEVP,VAR和VARP。

  •   
  • 计算。无法从使用其他列的表达式计算列。使用
    形成的列   集合运算符UNION,UNION ALL,CROSSJOIN,EXCEPT和INTERSECT
      相当于计算,也不可更新。

  •   
  • 正在修改的列不受GROUP BY,HAVING或DISTINCT子句的影响。

  •   
  • TOP不会在视图的select_statement中的任何位置与WITH CHECK OPTION子句一起使用。

  •   

此外,您可以在绕过这些限制的视图上使用require('es6-promise').polyfill(); var SearchActions = require('./search_actions.js') var search_actions = new SearchActions() //console.log(search_actions.receive_results) export search_actions.receive_results 触发器。

TL; DR - 您可以在许多场景中对视图执行DML。鉴于这一点,拥有管理谁可以执行这些操作的许可是有道理的。