当我将程序包作为SQL Server代理程序作业执行时,出现以下错误。
它是在SQL Server 2008实例上运行的SSIS 2008程序包。我的包安全性是DontSaveSensitive。
我甚至不知道如何开始修复此错误。
我应该先在哪里检查?
Date a value of time
Log Job History (MyJob)
Step ID 1
Server PCTSQL004
Job Name MyJob
Step Name Job_1
Duration 00:00:00
Sql Severity 0
Sql Message ID 0
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
Message
Executed as user: CS\DmcSysManager. The process could not be created for step 1 of job 0x63BB5A86DB23F947866D2A806BE4CC6B (reason: A required privilege is not held by the client). The step failed.
答案 0 :(得分:2)
作为一般准则,将程序包作为作业步骤运行的帐户必须具有与直接运行程序包的帐户相同的权限,以便访问程序包需要访问的任何外部资源。
如果程序包存储在MSDB数据库中,并且您已将保护级别设置为依赖服务器存储和角色以进行访问控制,则数据库角色现在可以控制对程序包的读写访问权限。
您需要为集群的Reader角色分配一个Integration Services固定数据库级角色或将用户定义的数据库级角色分配给该角色。 SQL Server 2008中的固定数据库级角色是db_ssisadmin,db_ssisoperator和db_ssisltduser。
如果为包指定了固定的数据库级角色,则从作业步骤调用包的用户帐户必须是该角色的成员。如果为包分配用户定义的角色,则用户帐户必须是其中一个固定数据库级角色的成员,并且必须是用户定义角色的成员。 另请检查Permissions Issue running SSIS package from Sql Job
或者,你可以
我确实遇到了同样的问题,我的问题通过以下步骤解决了 -
答案 1 :(得分:2)
除了SQL.Net Warrior's answer之外,还有另一种选择:
在SSMS中添加新的凭据(在安全性下),然后输入具有该程序包所需权限的域或本地用户,以及该用户的密码。其格式为DOMAIN\USER
或SYSTEMNAME\USER
。
在SQL Server代理下 - >代理,添加一个新的代理。检查子系统“SQL Server Integration Services Package”,并输入您在步骤1中创建的Credential的名称。
现在,在运行SSIS包的作业步骤中,“运行方式”下拉列表中将有一个新条目,其中包含您创建的代理服务器的名称。
选择代理,保存,您的工作步骤现在将以用户身份运行,并成功!
请注意,在凭据设置中,有一个选项可以选择加密提供程序(它本身似乎需要一些特殊的安装/设置)。我没有研究过这个以完全理解它,但我怀疑它是安全地存储密码。在继续使用此方法之前,您应该自己研究并理解它 - 只是为了解密码的任何潜在安全问题。