由2个用户执行一个Sql代理作业

时间:2015-09-16 10:59:13

标签: sql sql-server ssis sql-agent-job sql-agent

我有一个场景,那里有一个开发和prod环境。所有SSIS开发都将在开发SQL Server中进行,稍后它将被提供给一个单独的团队以在生产中进行部署。

所以现在我的要求是,作为SSIS包的开发者,我应该能够通过SSMS连接到prod服务器并执行其他团队在prod中部署的工作。我不应该在服务器上看到任何其他工作。

此方案的最佳设置是什么?

2 个答案:

答案 0 :(得分:2)

SSMS用户界面只能做它能做的事情。除了JodyT概述的方法之外,您将能够看到所有工作,但只执行您拥有的工作,您要求自定义,因此您将需要自定义解决方案。

在这种情况下,我很可能会用存储过程解决问题。我们将利用EXECUTE AS子句来运行存储过程,但是当它运行时,操作将作为特权用户执行。

msdb.dbo.sp_start_job是右键单击作业并“在步骤中启动作业...”时调用的方法

了解您要运行的作业的名称以及可以运行它的人员,这就是创建相应存储过程所需的全部内容。

CREATE PROCEDURE 
    dbo.AnandPhadkeRunJob
WITH EXECUTE AS 'domain\username'
BEGIN
    SET NOCOUNT ON;
    EXECUTE msdb.dbo.sp_startjob @job_name = 'Do Something';
END

在这里,我创建一个存储过程,启动名为“Do Something”的作业,并在“username”域帐户的上下文中运行它。根据您的环境进行定制。

答案 1 :(得分:1)

This page描述了SQL Server代理可用的不同数据库角色。

如果您是该作业的所有者并且您是SQLAgentUserRole数据库角色的成员,那么您将能够执行您拥有的作业。但是,您也可以看到其他工作,但却无法完成这些工作。