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