作为另一个用户权限执行存储过程
Posted
技术标签:
【中文标题】作为另一个用户权限执行存储过程【英文标题】:Execute a stored procedure as another user permission 【发布时间】:2011-02-18 15:33:00 【问题描述】:我遇到了以下问题:有一个用户必须执行存储过程 (spTest)。在 spTest 的主体中调用 sp_trace_generateevent。 sp_trace_generateevent 需要更改跟踪权限,我不希望用户拥有它。所以我希望用户能够执行 spTest。我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:试试这个:
EXECUTE AS user = 'special_user'
EXECUTE YourProcerdure
REVERT
查看这些:Understanding Context Switching<<<has examples of things like you are trying to do
Understanding Execution ContextEXECUTE AS Clause (Transact-SQL)EXECUTE AS (Transact-SQL)
【讨论】:
由于某种原因它没有帮助。我收到错误提示我无权运行 sp_trace_generateevent。但是当我以 special_user 身份连接到服务器时,执行 sp_trace_generateevent 没有问题。有什么想法吗? 来自:msdn.microsoft.com/en-us/library/ms181362.aspx EXECUTE AS正如其他人所建议的,您可以使用 Execute As 子句来实现您想要的。有关实现选择的示例,请查看在线图书文档中的 Execute As 子句。
为了进一步阅读并加深对本主题的理解,您希望实现的目标属于 Context Switching 的安全概念。
【讨论】:
【参考方案3】:这就是我所做的(并且成功了):
let Source = Sql.Database("server", "database",
[Query= "EXECUTE AS USER='user' EXECUTE [schema].[spname] 'parm1', 'parm2'"])
在
Source
【讨论】:
【参考方案4】:当您执行该特定存储过程时,您将需要使用所需的用户凭据创建不同的连接。
【讨论】:
由于某种原因它没有帮助。我收到错误提示我无权运行 sp_trace_generateevent。但是当我以 special_user 身份连接到服务器时,执行 sp_trace_generateevent 没有问题。有什么想法吗?以上是关于作为另一个用户权限执行存储过程的主要内容,如果未能解决你的问题,请参考以下文章