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

时间:2010-05-12 13:47:52

标签: sql-server sql-server-2005 permissions

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

4 个答案:

答案 0 :(得分:26)

试试这个:

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)

答案 1 :(得分:3)

正如其他人所建议的那样,您可以使用Execute As子句实现您的目标。有关实现选择的示例,请查看Execute As子句的联机丛书文档。

为了进一步阅读并更多地了解这一主题,您希望实现的目标是Context Switching的安全概念。

答案 2 :(得分:1)

这就是我所做的(并且成功):

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

Source

答案 3 :(得分:-1)

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