我有一个SSIS包,我可以在我的服务器上导入Integration Services并运行没有问题。它所做的就是将文件从网络上的目录复制到运行它的服务器上。
当我执行SQL代理作业时,它表示作业成功运行但没有复制文件。我验证源位置中存在文件并且目标路径存在。我也使用绝对路径(没有映射驱动器)。
为什么在将其作为SQL代理作业运行时不复制任何文件?
仅供参考 - 源目录实际上位于UNIX机器上,要将驱动器映射到该位置,您必须输入用户/密码组合。
我感觉SQL代理作业运行为NT SERVICE \ SQLSERVERAGENT,它不是具有UNIX框权限的用户。有没有办法以特定用户身份运行SQL作业?
提前致谢。
答案 0 :(得分:5)
您需要create a Credential,SQL Agent Proxy,然后assign the proxy account to the SQL Agent job step。代理帐户为specific to each subsystem(例如Powershell,CmdExec,SSIS等)
-- creating credential
USE [master]
GO
CREATE CREDENTIAL [Superuser] WITH IDENTITY = N'DOMAIN\account', SECRET = N'mypassword'
GO
-- creating proxy for CmdExec subsystem, adding principal
USE [msdb]
GO
EXEC msdb.dbo.sp_add_proxy @proxy_name=N'My custom proxy',@credential_name=N'Superuser',
@enabled=1
GO
EXEC msdb.dbo.sp_grant_proxy_to_subsystem @proxy_name=N'My custom proxy', @subsystem_id=3
GO
EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'My custom proxy', @fixed_server_role=N'sysadmin'
GO
-- assigning job step to run as a given proxy user
USE [msdb]
GO
EXEC msdb.dbo.sp_update_jobstep @job_id=N'0df2dac2-4754-46cd-b0bf-05ef65e1f87e', @step_id=1 , @subsystem=N'CmdExec',
@proxy_name=N'My custom proxy'
GO