使用其他作业在远程服务器上启动作业的最佳实践

时间:2017-01-20 21:51:30

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

如果这不是一个正确的问题,我很抱歉。我过去的帖子标记为无关,因为我在征求意见,我认为这可能是边缘问题?

我希望能够从另一台SQL服务器上的作业在远程SQL服务器上运行作业。我知道怎么做,这不是我的问题。

我们最近在工作中迁移了我们的服务器,并为几乎所有内容重新安装了所有安全/权限/登录。所以现在出现了安全问题。以前我可以通过使用linkserver并使用命令

来执行此操作
EXEC [LINKSERVER].msdb.dbo.sp_start_job N'JOB NAME'

但是,由于迁移,我以前用来做这个的链接服务器现在已经不见了,而且他们没有接受我的请求来重新设置它。他们说使用另一种方法在另一份工作中使用。

所以我找到了这份工作,而且它正在使用SQLCMD,这需要在工作步骤中存储用户名和密码。使用此代码:

declare @cmd varchar(2000), @Success int
set @cmd='sqlcmd -S "{IP ADDRESS}" -U {USERNAME} -P {PASSSWORD} -Q "exec msdb.dbo.sp_start_job @job_name=''JOB NAME''"'
exec @Success = xp_cmdshell @cmd
IF (@Success = 0)
   PRINT 'Success'
ELSE
   PRINT 'Failure';

在我看来,这似乎比使用链接服务器安全得多?没有?因为现在任何人和他们的母亲至少可以读取这些工作步骤的访问权限,因此可以获取访问受限的登录,但仍然如此。如果由于某种原因,用户的SQL权限被撤销,或者离开公司,他们仍然可以通过某种方式登录SQL服务器。

在任何地方以明文形式存储凭据对我来说一直是个红旗。从安全角度来看,完成这项任务的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为您最好的选择是使用this article所述的OPENROWSET。使用底部的动态查询方法。