2

我有一个 SSIS 包,我可以将其导入服务器上的 Integration Services 并毫无问题地运行。它所做的只是将文件从网络上的目录复制到运行它的服务器上。

当我执行 SQL 代理作业时,它说作业运行成功,但没有文件被复制。我验证源位置中有文件并且目标路径存在。我也在使用绝对路径(没有映射驱动器)。

为什么当我将它作为 SQL 代理作业运行时它不复制任何文件?

仅供参考 - 源目录实际上位于 UNIX 机器上,要将驱动器映射到该位置,您必须输入用户/密码组合。

我有一种感觉,SQL 代理作业作为 NT SERVICE\SQLSERVERAGENT 运行,它不是对 UNIX 框具有权限的用户。有没有办法以特定用户身份运行 SQL 作业?

提前致谢。

4

1 回答 1

5

您需要创建一个凭据、一个SQL 代理代理,然后将代理帐户分配给 SQL 代理作业步骤。代理帐户特定于每个子系统例如 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
于 2013-05-14T13:34:08.247 回答