在SQL Server视图中模拟?

时间:2013-08-13 08:01:18

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

是否可以使用模拟创建视图,类似于存储过程中的"execute as"

我想在单独的架构中创建一些视图。某些用户应该SELECTUPDATE访问这些视图,以便他们能够更改基础表,但无法直接更新表。

这可能是一种观点吗?

1 个答案:

答案 0 :(得分:1)

不,这是不可能的。 EXECUTE AS主要用于SP,但您可以更广泛地使用它们。 From TechNet

  

在SQL Server中,您可以定义以下内容的执行上下文   用户定义的模块:函数(内联表值除外)   功能),程序,队列和触发器。

     

...

     

函数(内联表值函数除外),存储过程,   和DML触发器{EXEC | EXECUTE} AS {CALLER |自我|所有者|   'user_name'}

     

数据库范围的DDL触发器{EXEC | EXECUTE} AS {CALLER |自   | 'user_name'}

     

带服务器范围和登录触发器的DDL触发器{EXEC |执行 }   AS {CALLER |自我| 'login_name'}

     

队列{EXEC | EXECUTE} AS {SELF |所有者| 'user_name'}

但是,你有一些选择:

  • 创建返回数据的GET-SP和更新数据的UPDATE-SP(我使用XML输入而不是表变量)
  • 使用由“模拟”用户创建的视图,并使用DENY / GRANT进行权限继承,例如GRANT VIEW DEFINITION