都有切换上下文的功能
一、比较上下文切换功能:
与 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
分享到:
相关推荐
3. **无需显式事务控制**:当使用`EXECUTE IMMEDIATE`执行SQL语句时,通常不需要显式的事务控制,因为这些操作默认是在当前事务的上下文中执行的。然而,如果需要手动控制事务边界,如在批处理操作中,显式的提交或...
使用上下文管理器可以确保锁在使用后被释放,避免死锁的发生: ```python import threading lock = threading.Lock() with lock: # 执行需要同步的代码 print("Lock acquired, doing critical section work.") ...
execute immediate 'set role all'; end; ``` 2. 给动态语句传值(USING 子句) 使用 Execute Immediate 可以给动态语句传值,例如: ```plsql declare l_depnam varchar2(20) := 'testing'; l_loc varchar2...
以上代码展示了如何使用`Connection`对象的`execute`方法执行SQL查询,并通过`Recordset`对象处理查询结果的基本流程。这种方法适用于多种基于ADO的数据库应用程序开发,特别是在使用Microsoft Jet数据库引擎时非常...
本文将深入探讨在Execute SQL Task中如何使用参数和变量,基于给定的标题和描述。 1. **参数与变量的区别** - **参数**:在SQL语句中,参数通常用于传递值给存储过程或者动态SQL。它们是预定义的占位符,在执行时...
在ASP.NET中,`Server.Execute`方法用于在当前HTTP请求的上下文中执行指定的ASP.NET页面或代码块。这个方法允许一个页面动态地包含另一个页面的内容,使得多个页面可以共享代码或数据,提高代码复用性。然而,这并...
这一功能由`EXECUTE AS`语句提供,它允许开发者在存储过程、触发器、批处理或函数中切换执行上下文。相较于SQL Server 2000中的`SETUSER`命令,`EXECUTE AS`有更广泛的适用性,并且不再局限于系统管理员或数据库所有...
同时,它可能还支持一些高级特性,如上下文管理,允许用户在特定的环境或全局变量下执行代码,增强了代码的可复用性和灵活性。 在实际应用中,`py-execute`库可以广泛应用于各种领域。例如,在教育场景中,它可以...
### Python上下文管理器使用详解 #### 一、引言 在Python编程中,上下文管理器是一个重要的概念,它能够有效地帮助我们管理和控制资源,尤其是对于那些需要显式打开和关闭的操作,如文件处理、数据库连接管理等。...
### SQL Server EXEC与sp_executesql的区别详解 #### 一、引言 在SQL Server中,执行动态SQL或存储过程时,开发人员通常面临选择使用`EXEC`还是`sp_executesql`的问题。这两种方法虽然都能达到目的,但在功能、性能...
SET @sql = 'SELECT * FROM ' + QUOTENAME(@TableName) + ' WHERE Score >= ' + CAST(@Score AS NVARCHAR(10)) EXEC (@sql) ``` 需要注意,`EXEC`中的动态SQL字符串只能有一个变量,如果需要拼接多个变量,需要分开...
在Oracle中,动态SQL经常与游标(Cursors)结合使用,以处理返回多行结果集的情况。例如: ```sql DECLARE cursor_name CURSOR FOR dynamic_sql_string; var1 datatype1; var2 datatype2; BEGIN dynamic_sql_...
然而,在使用`pyinstaller`将Python脚本打包成exe文件后,可能会遇到“Failed to execute script pyi_rth_certifi”这样的错误。本文将详细解释这个问题的原因,并提供解决此问题的方法。 首先,`pyinstaller`在...
在SQL Server环境中,数据库的备份和恢复是维护数据安全与完整性的关键操作。"execute immediate" 是Oracle数据库中的动态SQL执行语句,但在这里我们讨论的是SQL Server,它使用不同的命令来实现类似的功能。不过,...
- 使用`SetThreadContext`函数更新线程上下文。 - 通过`ResumeThread`函数恢复线程的执行。 **2. 构建合法的EIP值** - 在目标进程中分配一段可执行内存,用于存放自定义代码。 - 编写自定义代码(如使用汇编语言)...
在这个主题中,我们将深入探讨如何在VB中使用`ExecuteSql`函数来操作数据库。 首先,我们需要了解VB中的数据库连接。通常,我们使用ADO(ActiveX Data Objects)库来建立和管理与数据库的连接。在代码中,我们需要...
ExecuteSQL.java
JDBC 中 PreparedStatement 接口提供的 execute、executeQuery 和 executeUpdate 之间的区别及用法 JDBC 中的 PreparedStatement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。...
通过ExecuteShell库,开发者可以避免直接与底层的复杂交互,简化了代码,提高了开发效率。 **核心功能** 1. **执行shell命令**: ExecuteShell提供了简洁的API,允许开发者在Android应用中执行各种shell命令,包括...
Jenkins构建Execute shell script on remote host using ssh命令;JenkinsSSH执行命令;