我遇到了以下问题:有一个用户必须执行存储过程(spTest)。在spTest的主体中调用sp_trace_generateevent。 sp_trace_generateevent需要更改跟踪权限,我不希望用户拥有它。所以我希望用户能够执行spTest。我怎样才能做到这一点?
答案 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)
当您执行该特定存储过程时,您需要使用所需的用户凭据创建不同的连接。