都有切换上下文的功能
一、比较上下文切换功能:
与 SETUSER 语句相比,EXECUTE AS 具有以下优点:
1、除 sa 和 dbo 之外的服务器主体或数据库主体可以调用 EXECUTE AS。
1)、调用 EXECUTE AS 语句的用户必须具有目标主体的 IMPERSONATE 权限。
2)、SETUSER 只限制于 sysadmin 固定服务器角色的成员或 db_owner 固定数据库角色的成员。
2、在语句中显式定义模拟的作用域。
1)、将指定的主体指定为 LOGIN(服务器级模拟),或者指定为 USER(数据库级模拟)。
2)、SETUSER 语句中的模拟作用域是隐式的。如果 sysadmin 的成员调用该语句,将使用服务器级模拟。如果为 dbo 的帐户调用该语句,将使用数据库级模拟。
3、模拟将保持有效,直到出现下列情况之一为止:
1)、删除会话。
2)、上下文被切换到另一登录名或用户。
3)、上下文被恢复到以前的执行上下文。
对于 SETUSER,模拟将保持有效,直到出现下列情况之一为止
1)、发出另一个 SETUSER 语句。
2)、当前数据库由为 dbo 的帐户或为 sysadmin 固定服务器角色成员的帐户使用 USE 语句更改。
二、恢复到以前的上下文
1、EXECUTE AS
使用 REVERT 语句可以返回到以前的上下文。REVERT 语句的调用方必须位于发生模拟的数据库中。
2、SETUSER
若要返回到以前的上下文,请使用 SETUSER 语句且不指定用户名。
三、实例
1、EXECUTE AS
USE Sales;
GO
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'CompanyDomain\SqlUser1'
AS
SELECT user_name();
GO
2、SETUSER
SETUSER 'mary'
GO
GRANT SELECT ON computer_types TO joe
GO
SETUSER
分享到:
相关推荐
在SQL Server 2000中,您可以使用SETUSER命令来模拟SQL用户的执行环境,但问题在于,只有系统管理员或者数据库的所有者才能使用这个命令,而且Windows账户也不能使用该命令。在SQL Server 2005中,EXECUTE AS语句...
EXECUTE
Oracle中EXECUTE IMMEDIATE用法
Execute runner
Python 使用pyinstaller打包成exe文件后运行出现Failed to execute script ***的解决方案
ExecuteSQL.java
connection对象的execute方法
对数据库上下文所做的更改只在 sp_executesql 语句结束前有效。如果只更改了语句中的参数值,则 sp_executesql 可用来代替存储过程多次执行 Transact-SQL 语句。因为 Transact-SQL 语句本身保持不变,仅参数值发生...
川崎工业机器人AS系统与AS语言 机器人现场编程-川崎机器人AS系统与语言全文共8页,当前为第1页。 AS系统 AS系统是川崎机器人的操作控制系统,其按照给定的指令和程序控制机器人。 AS 系统被编写在机器人控制单元的...
could not execute:bad executable format(win32 error 193) 下了一个实现MD5的代码,编译时没有错误,但是执行的时候却提示:could not execute:bad executable format(win32 error 193)
delegate_execute.exe
execute immediate 用法研究 为初学者打造。
failed to execute script 解决方案+命令行执行传参exe
execute_exe
winform Server.Execute! 很值得下载看看!资源免费,大家分享!!
尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上。 — 使用技巧 1. EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交 如果通过EXECUTE IMMEDIATE处理DML命令, 那么在完成...
Python 3.85 使用pyinstaller在win10 x64下打包的应用程序,在win10 x64下运行完全正常,但是在win7 x64下则报错。failed to execute script pyi_rth_ pyi_rth_xxx 解决方法
ExecuteShell 是一个可以让你在你的 Android 项目上方便快速使用 shell 指令的开源库
经常用asp的同行,可能会建议用set rs=conn.execute(sql)来代替set rs=server.createobject(“ADODB.recordset”):rs.open conn,sql,1,1。还有一些同行更提出了用set rs=conn.execute(sql):res=rs.getRows(100)来...
ExecutorService的execute和submit方法