SQL EXECUTE AS 子句

Posted

技术标签:

【中文标题】SQL EXECUTE AS 子句【英文标题】:SQL EXECUTE AS Clause 【发布时间】:2015-01-12 11:56:20 【问题描述】:

我有一个 SQL 用户“ABC”,拥有系统管理员权限并可以访问特定服务器的所有数据库,比如数据库 A 和数据库 B。我的应用程序使用只能访问一个数据库 A 的用户。 我创建了一个存储过程来在数据库 B 的表中插入记录。所以我使用 EXECUTE AS 子句与用户 ABC 执行存储过程,但经过测试我发现如果我的应用程序用户没有完全相同的服务器角色使用ABC有,它不起作用。 当我让我的其他用户成为系统管理员时,它不会出错并且效果很好。 如果两个用户都需要具有相同的角色,那么这个 EXECUTE AS 子句有什么用?还是我错过了什么?

【问题讨论】:

发布你的 sql 代码。如果没有代码,就不可能知道你的程序出了什么问题。也许是权限问题,但也许不是。 Paolo,问题不在于程序代码,问题与权限有关,我显然是在询问权限问题。 【参考方案1】:

我想你的问题已经在这里得到了回答:SQL Server Execute Impersonation

execute as user = 'ABC' --模拟范围仅限于当前数据库。

对比

execute as login = 'ABC' --模拟的范围是服务器级别的。

【讨论】:

好的,让我尝试以 login='ABC' 的身份执行。如果这对我有帮助,我会通知你。 我无法使用存储过程添加执行为 login='ABC',它给出了错误。错误是“登录”附近的语法不正确。下面是我的代码。 'code' alter procedure storedProcedure with Execute as login -- @r char(15) output as insert into Table1(ID,NAME) values('11','sam') go'code'

以上是关于SQL EXECUTE AS 子句的主要内容,如果未能解决你的问题,请参考以下文章

使用 EXECUTE AS 进行安全性时 SQL Server 的加速策略

使用 .NET SqlCommand 运行带有 EXECUTE AS 语句的 t-sql 存储过程

如何在 EXECUTE IMMEDIATE 中使用动态 where 子句

存储过程 SQL 编译错误中的执行错误:Statement.execute 中的标识符“TEST3”无效

SQL Server ->> WITH RESULT SETS子句

Oracle 的 EXECUTE IMMEDIATE 与存储过程中的 LIKE 子句