执行存储过程作为另一个登录

时间:2013-10-08 08:40:48

标签: .net sql sql-server login execute-as

我们的产品中运行了一些SQL代理作业。但是我们想要取消SQL服务器代理,以便我们可以使用Sql server express。所以我正在编写自己的服务来执行当前作为作业运行的存储过程。除“所有者”之外的所有其他内容都可以轻松复制。据我所知,当您在SQL Server代理中指定所有者时,作业将在该登录上下文中运行。我使用.NET中的SqlCommand类来运行存储过程。但该类不支持提供不同的登录上下文。有没有其他方法可以为SQL Server Agent允许您指定不同的作业登录?

提前致谢, -Neel。

2 个答案:

答案 0 :(得分:0)

您可以在存储过程中使用EXECUTE AS命令以作为参数传递的其他用户执行:

create procedure testing
    (@username nvarchar(100))
as
    execute as user = @username;

    select USER_NAME(); -- this is just to test the current user name, remove it later
    -- your code goes here

    revert;

您可以在此处详细了解该权限和所需权限:http://msdn.microsoft.com/en-us/library/ms181362.aspx

答案 1 :(得分:0)

如果您不想使用当前连接从代码运行存储过程,那么首先在sql server中创建一个用户并使用该连接执行存储过程。

SQlCommand将连接作为保存所有者信息的参数。您必须显式创建与新用户的新连接,并使用它来执行您的SP。