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

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

【问题讨论】:

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

标签: sql-server stored-procedures permissions execute sysadmin


【解决方案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'
猜你喜欢
  • 2010-10-22
  • 2013-06-28
  • 2020-07-15
  • 1970-01-01
  • 2014-12-23
  • 2023-03-08
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
相关资源
最近更新 更多