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

Execute One Sql Agent Job by 2 users

我有一个场景,其中有开发和生产环境。所有 SSIS 开发都将在开发 SQL 服务器中进行,稍后将交给单独的团队在生产中部署。

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

这种情况的最佳设置是什么?

This page 描述了可用于 SQL 服务器代理的不同数据库角色。

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

SSMS UI 只能做它能做的。除了 JodyT 概述的方法之外,您将能够看到所有作业但只能执行您拥有的作业,您要求定制一些东西,因此您将需要一个定制解决方案。

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

msdb.dbo.sp_start_job 是当您右键单击作业和 "Start Job at Step..."

时调用的方法

知道了,您想要 运行 的工作名称和 可以 运行 的人,这就是您创建合适的人所需的一切存储过程。

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" 域帐户的上下文中 运行 执行它。定制它以匹配您的环境。