从SQL Agent运行SSIS包

时间:2018-04-22 20:38:52

标签: sql-server ssis sql-server-2014

我正在尝试创建一个新作业来自动运行SSIS包。

我成功执行从SSDT运行包但当我尝试从sql Agent运行它时,它会生成以下错误:

 Source: Package      Description: Failed to decrypt protected XML node "DTS:Password" with error 0x8009000B "Key not valid for use in specified state.". You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available.

我尝试使用32位运行时使用和不使用盒子。 sql server和SQL Agent是64位

当我将保护级别更改为DontSaveSensitive时,出现以下错误:

Executed as user: VG-DATA2\vgadmin. Microsoft (R) SQL Server Execute Package Utility  Version 12.0.5000.0 for 64-bit  Copyright (C) Microsoft Corporation. All rights reserved.    Started:  22:54:19  Error: 2018-04-22 22:54:20.03     Code: 0xC0202009     Source: Package Connection manager "vg-data2.westeurope.cloudapp.azure.com.WT_Delivery.vigicolis"     Description: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80040E4D.  An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 11.0"  Hresult: 0x80040E4D  Description: "Échec de l'ouverture de session de l'utilisateur 'vigicolis'.".  End Error  Error: 2018-04-22 22:54:20.03     Code: 0xC00291EC     Source: Tâche d'exécution de requêtes SQL Execute SQL Task     Description: Failed to acquire connection "vg-data2.westeurope.cloudapp.azure.com.WT_Delivery.vigicolis". 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 (1).  Started:  22:54:19  Finished: 22:54:20  Elapsed:  0.156 seconds.  The package execution failed.  The step failed.

有人知道这个问题吗?

提前致谢

3 个答案:

答案 0 :(得分:1)

我假设你有连接管理器到需要用户名和密码的数据库?

有很多关于此的文章,但无论如何我都要解释一下。

简短的回答是:不要在连接管理器中使用登录名/密码。使用Windows身份验证

答案很长;

我们如何存储您的数据库密码以备将来使用?我们当然不希望在包中以明文形式存储它,因为任何拥有pacakge的人都可以窃取密码。包的保护级别指示应如何存储密码。 “以明文保存”不是一种选择

以下是所有密码存储选项(称为保护级别):SSIS Packages Using Package Protection Level

默认保护级别EncryptSensitiveWithUserKey会加密文本文件中的密码。这只能在加密它的同一用户(即你)

下解密

在SQL Agent下运行时,它以不同的用户身份运行,因此密码无法解密,您收到第一条错误消息。

解决方法是错误的想法,就是将SQL代理设置为自己运行。这是个坏主意,所以我不会详细介绍。

然后,您将保护级别更改为DontSaveSensitive。这通过不保存密码来保护密码。因此,无论您如何运行包,都没有保存密码。这会收到第二条错误消息。

另一个选项是EncryptSensitiveWithPassword。这会使用密码加密您的密码。再一个坏主意,因为现在你只有另一个密码来管理

我建议你做什么(没有关于你在做什么的任何细节):

  1. 确保所有SQL Server连接管理器都使用Windows身份验证
  2. 使用DontSaveSensitive。这是有效的,因为包中没有定义密码
  3. 定义Windows服务帐户并将其分配给SQL代理
  4. 确保此Windows服务帐户有权访问数据库
  5. 如果您有任何疑问,请在评论中发帖。还请更新您的问题,详细了解您正在使用的连接管理器类型。 (SQL Server?Oracle?Excel?)

答案 1 :(得分:1)

如果你不能按照@Nick的建议使用Windows身份验证,我建议你去配置包,在那里你可以将密码和其他连接信息存储在文件或表中,并适当地设置权限,即SQL代理服务帐户应具有权限。否则,请转到服务器存储包保护级别。

有关包保护级别的详细信息,请参阅https://msdn.microsoft.com/en-us/library/ms141747(v=sql.120).aspx

答案 2 :(得分:1)

在运行SQL和SSIS 2014时添加其他答案,我建议切换到SSIS目录和项目部署模式。通过这样做,您可以解决在环境中存储连接密码的问题。

这种设计的好处是敏感密码可以由其他人维护,比如支持管理员,而不是开发人员自己。这在开发人员无法访问的生产环境中非常有用。

关于如何使用SSIS目录并将环境用于连接数据的good article