我有一个SSIS包,它从MySQL数据库中获取数据并将其放入SQL Server表中。与MySQL的连接是ADO.net。包裹在BIDS中运行良好。
我想将程序包部署为在SQL Server 2008上作为作业运行.MySQL连接要求敏感数据存储在程序包中或保存在某些外部配置源中。如果它存储在包中,它将使用特定于我的Windows用户配置文件的密钥加密,或者必须通过密码保护。
我尝试了三种设置SQL Server代理作业的方法来执行此pacakge,但都失败了:
使用密码
我将程序包的ProtectionLevel设置为EncryptSensitiveWithPassword并为程序包提供密码。然后我将包的副本保存到msdb。然后,我可以连接到SSIS并运行包,此时系统会提示我输入密码。
当我尝试将此作为SQL Server中的作业安排时,系统会提示您通过单击“作业步骤属性”的“配置”选项卡输入密码,我可以看到/ DECRYPT开关已添加到“命令行”选项卡中。 “运行方式”属性设置为SQL Server代理服务帐户,该帐户映射到具有sysadmin服务器角色的数据库登录名。当我尝试开始这项工作时,我收到以下错误:
Executed as user: DOMAIN\UserROLE. Microsoft (R) SQL Server Execute Package Utility Version 10.0.5500.0 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 12:31:30 Error: 2012-07-03 12:31:31.20 Code: 0xC00291EC Source: Get Data Execute SQL Task Description: Failed to acquire connection "DATA_SOURCE". Connection may not be configured correctly or you may not have the right permissions on this connection. End Error DTExec: The package execution returned DTSER_FAILURE
似乎使用此方法,包密码本身不会存储在作业访问它的任何地方。
使用XML配置文件
然后我创建了一个包的副本并将ProtectionLevel设置为DontSaveSensitive,并设置了一个包配置来将MySQL凭证存储在XML文件中。然后我将其保存到msdb,然后从我运行包 Integration Services我可以提供配置文件的路径,一切都很好。但是,当我为包设置作业时,我再次指向服务器上的配置文件,但作业失败并出现相同的错误。我想知道这是否是因为SQL Server代理没有关联的Windows帐户,允许它从存储在文件系统中的XML文件中读取。
使用SQL Server表配置
这次我创建了一个包的副本,并将ProtectionLevel设置为ServerStorage。然后,我在目标SQL Server数据库中创建了[SSIS配置]表。我修改了此表中的条目以包含MySQL数据源的密码。同样,程序包从Integration Services成功运行,但失败时出现与从作业运行时相同的错误。我已经检查过SQL Server代理能够从[SSIS配置]表中读取确定 - 我设置了一个独立的工作来测试它。
有没有人对我在这里应该做些什么有任何建议?
我正在考虑为此放弃SQL Server代理工作,然后回到简单地由Windows调度程序安排程序包,但在放弃之前我会先尝试一下。
答案 0 :(得分:0)
我正在使用加密密码的方法,如上所述设置EncryptSensitiveWithPassword
并且看不到任何错误。在使用集成服务导入包时,请记住使用选项keep protection level of the original package
,但看起来你也是这样做的。
尝试将角色SQLAgentOperatorRole
设置为您的SQL Server代理服务帐户,您没有提及,我不确定您是否这样做。这可能会解决您的权限问题。 (喜欢通过评论来回答,但我也缺乏权限:)