以另一个用户权限执行存储过程

问题描述:

我遇到了以下问题:有一个用户必须执行存储过程(spTest)。在spTest的主体中调用sp_trace_generateevent。 sp_trace_generateevent需要更改跟踪权限,我不希望用户拥有它。所以我希望用户能够执行spTest。我怎样才能做到这一点?以另一个用户权限执行存储过程

试试这个:

EXECUTE AS user = 'special_user' 

EXECUTE YourProcerdure 

REVERT 

看到这些:
Understanding Context Switching<<<has examples of things like you are trying to do
Understanding Execution Context
EXECUTE AS Clause (Transact-SQL)
EXECUTE AS (Transact-SQL)

+0

由于某种原因,它没有帮助。我得到错误,我没有权限运行sp_trace_generateevent。但是当我作为special_user连接到服务器时,我没有任何问题来执行sp_trace_generateevent。有任何想法吗? – StuffHappens 2010-05-12 14:11:12

+1

来自:http://msdn.microsoft.com/zh-cn/library/ms181362.aspx在EXECUTE AS 中指定的用户或登录名必须分别作为主体存在于sys.database_principals或sys.server_principals中,或者EXECUTE AS语句失败。另外,IMPERSONATE权限必须授予委托人。除非调用者是数据库所有者,或者是sysadmin固定服务器角色的成员,否则即使用户通过Windows组成员身份访问SQL Server的数据库或实例时,主体也必须存在。 – 2010-05-12 14:21:09

+0

这个建议也没有帮助。看来我应该打开TRUSTWORTHY。不管怎样,谢谢你。 – StuffHappens 2010-05-13 06:38:31

当您执行该特定的存储过程时,您将需要使用所需的用户凭证创建不同的连接。

+0

出于某种原因,但这并没有帮助。我得到错误,我没有权限运行sp_trace_generateevent。但是当我作为special_user连接到服务器时,我没有任何问题来执行sp_trace_generateevent。有任何想法吗? – StuffHappens 2010-05-12 14:19:51

正如其他人所建议的,你可以实现你的心愿使用EXECUTE AS子句什么。有关实施选择的示例,请参阅Execute As子句的联机丛书文档。

为了进一步阅读和发展对此主题的更多理解,您期望实现的目标是Context Switching的安全概念。

这是我做什么(成功):

let Source = Sql.Database("server", "database", 
    [Query= "EXECUTE AS USER='user' EXECUTE [schema].[spname] 'parm1', 'parm2'"]) 

Source