我有一个场景,其中有一个开发和生产环境。所有 SSIS 开发都将在 dev SQL Server 中进行,然后将其交给一个单独的团队在生产中进行部署。
所以现在我的要求是,作为 SSIS 包的开发者,我应该能够通过 SSMS 连接到 prod 服务器,并在 prod 中执行其他团队部署的作业。而且我应该看不到服务器上的任何其他工作。
这种情况的最佳设置是什么?
我有一个场景,其中有一个开发和生产环境。所有 SSIS 开发都将在 dev SQL Server 中进行,然后将其交给一个单独的团队在生产中进行部署。
所以现在我的要求是,作为 SSIS 包的开发者,我应该能够通过 SSMS 连接到 prod 服务器,并在 prod 中执行其他团队部署的作业。而且我应该看不到服务器上的任何其他工作。
这种情况的最佳设置是什么?
SSMS UI 只能做它可以做的事情。除了 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”域帐户的上下文中运行它。量身定制以匹配您的环境。
本页介绍了可用于 SQL Server 代理的不同数据库角色。
如果您是作业的所有者并且您是SQLAgentUserRole
数据库角色的成员,那么您将能够执行您拥有的作业。但是,您也可以查看其他作业,但无法对这些作业执行任何操作。