0

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

在此先感谢,-尼尔。

4

2 回答 2

0

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

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

于 2013-10-08T10:24:44.150 回答
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

于 2013-10-08T10:11:20.463 回答