`

上下文切换—EXECUTE AS 与 SETUSER的使用

Go 
阅读更多
都有切换上下文的功能

一、比较上下文切换功能:
与 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
分享到:
评论

相关推荐

    Oracle中EXECUTE IMMEDIATE用法

    3. **无需显式事务控制**:当使用`EXECUTE IMMEDIATE`执行SQL语句时,通常不需要显式的事务控制,因为这些操作默认是在当前事务的上下文中执行的。然而,如果需要手动控制事务边界,如在批处理操作中,显式的提交或...

    execute immediate 用法研究

    execute immediate 'set role all'; end; ``` 2. 给动态语句传值(USING 子句) 使用 Execute Immediate 可以给动态语句传值,例如: ```plsql declare l_depnam varchar2(20) := 'testing'; l_loc varchar2...

    connection对象的execute方法

    以上代码展示了如何使用`Connection`对象的`execute`方法执行SQL查询,并通过`Recordset`对象处理查询结果的基本流程。这种方法适用于多种基于ADO的数据库应用程序开发,特别是在使用Microsoft Jet数据库引擎时非常...

    winform Server.Execute

    在ASP.NET中,`Server.Execute`方法用于在当前HTTP请求的上下文中执行指定的ASP.NET页面或代码块。这个方法允许一个页面动态地包含另一个页面的内容,使得多个页面可以共享代码或数据,提高代码复用性。然而,这并...

    如何修改SQL Server 2005 执行环境

    这一功能由`EXECUTE AS`语句提供,它允许开发者在存储过程、触发器、批处理或函数中切换执行上下文。相较于SQL Server 2000中的`SETUSER`命令,`EXECUTE AS`有更广泛的适用性,并且不再局限于系统管理员或数据库所有...

    Python库 | py-execute-0.1.1.tar.gz

    同时,它可能还支持一些高级特性,如上下文管理,允许用户在特定的环境或全局变量下执行代码,增强了代码的可复用性和灵活性。 在实际应用中,`py-execute`库可以广泛应用于各种领域。例如,在教育场景中,它可以...

    python 上下文管理器使用方法小结

    ### Python上下文管理器使用详解 #### 一、引言 在Python编程中,上下文管理器是一个重要的概念,它能够有效地帮助我们管理和控制资源,尤其是对于那些需要显式打开和关闭的操作,如文件处理、数据库连接管理等。...

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别.doc

    SET @sql = 'SELECT * FROM ' + QUOTENAME(@TableName) + ' WHERE Score >= ' + CAST(@Score AS NVARCHAR(10)) EXEC (@sql) ``` 需要注意,`EXEC`中的动态SQL字符串只能有一个变量,如果需要拼接多个变量,需要分开...

    SSIS中ExecuteSQL TASK组件关于参数的使用

    本文将深入探讨在Execute SQL Task中如何使用参数和变量,基于给定的标题和描述。 1. **参数与变量的区别** - **参数**:在SQL语句中,参数通常用于传递值给存储过程或者动态SQL。它们是预定义的占位符,在执行时...

    动态SQL之EXECUTE IMMEDIATE

    在Oracle中,动态SQL经常与游标(Cursors)结合使用,以处理返回多行结果集的情况。例如: ```sql DECLARE cursor_name CURSOR FOR dynamic_sql_string; var1 datatype1; var2 datatype2; BEGIN dynamic_sql_...

    SQL Server EXEC和sp_executesql的区别

    ### SQL Server EXEC与sp_executesql的区别详解 #### 一、引言 在SQL Server中,执行动态SQL或存储过程时,开发人员通常面临选择使用`EXEC`还是`sp_executesql`的问题。这两种方法虽然都能达到目的,但在功能、性能...

    Python 使用pyinstaller打包成exe文件后运行出现Failed to execute script pyi_rth_certifi

    然而,在使用`pyinstaller`将Python脚本打包成exe文件后,可能会遇到“Failed to execute script pyi_rth_certifi”这样的错误。本文将详细解释这个问题的原因,并提供解决此问题的方法。 首先,`pyinstaller`在...

    用execute immediate 执行备份恢复SQLSVR数据库

    在SQL Server环境中,数据库的备份和恢复是维护数据安全与完整性的关键操作。"execute immediate" 是Oracle数据库中的动态SQL执行语句,但在这里我们讨论的是SQL Server,它使用不同的命令来实现类似的功能。不过,...

    获取EIP控制上下文

    - 使用`SetThreadContext`函数更新线程上下文。 - 通过`ResumeThread`函数恢复线程的执行。 **2. 构建合法的EIP值** - 在目标进程中分配一段可执行内存,用于存放自定义代码。 - 编写自定义代码(如使用汇编语言)...

    hanshu.rar_Execute sql vb

    在这个主题中,我们将深入探讨如何在VB中使用`ExecuteSql`函数来操作数据库。 首先,我们需要了解VB中的数据库连接。通常,我们使用ADO(ActiveX Data Objects)库来建立和管理与数据库的连接。在代码中,我们需要...

    ExecuteSQL.java

    ExecuteSQL.java

    JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之间的区别及用法

    JDBC 中 PreparedStatement 接口提供的 execute、executeQuery 和 executeUpdate 之间的区别及用法 JDBC 中的 PreparedStatement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。...

    could not execute

    could not execute:bad executable format(win32 error 193) 下了一个实现MD5的代码,编译时没有错误,但是执行的时候却提示:could not execute:bad executable format(win32 error 193)

    Asp Conn.execute的参数与返回值总结

    在ASP(Active Server Pages)开发中,`Conn.Execute`方法是用于执行SQL命令的关键函数,通常用于与数据库交互,如插入、更新、删除数据或执行存储过程。本文将深入探讨`Conn.Execute`的参数、返回值以及如何利用...

    failed to execute script 解决方案+命令行执行传参exe

    在IT行业中,我们经常遇到各种错误,"failed to execute script"是其中之一,尤其在尝试运行Python脚本时。这个问题通常发生在使用Python的`py`或`exe`可执行文件时,尤其是在试图通过命令行传递参数时。让我们深入...

Global site tag (gtag.js) - Google Analytics