【问题标题】:run SSIS Package from SQL Agent从 SQL 代理运行 SSIS 包
【发布时间】:2018-04-22 20:38:52
【问题描述】:

我正在尝试创建一个新作业来自动运行 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.

有人知道这个问题吗?

提前致谢

【问题讨论】:

  • 但是现在在SSDT中不行!!
  • 您似乎在使用包中的密码,可能是为了登录数据源。当您选择不保存敏感信息时,您将丢失密码并且无法登录 DS

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


【解决方案1】:

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

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

A good article 关于如何使用 SSIS 目录和使用环境获取连接数据

【讨论】:

  • 谢谢大家的回答。正如 Ferdipux 所说,我认为我会切换到 SSIS 目录
  • 只是最后一个问题。是否可以从 SQL 代理运行包而无需在生产服务器上安装 SSIS?例如,如果我在本地计算机上开发包,然后将其粘贴到生产服务器上并从 SQL 代理浏览到其路径
  • 您必须安装 MS SQL Server 的 SSIS 组件才能运行 SSIS 包。 SSIS 组件安装 dtexec 和其他运行时库。 SQL Agent 只是启动dtexec 或从SSISDB 数据库调用过程,它不能自己处理包。
  • 谢谢费尔迪普克斯。事实上,在我的公司,我们有 Web 版本,它不能让我们安装 SSIS 组件。这就是我问这个问题的原因
  • @user3569267 你在这里的回答率很差。以后请选择一个答案(这里三个都是很好的答案),而不是问更多的问题。
【解决方案2】:

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

这方面的文章很多,但还是让我解释一下。

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

长答案是;

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

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

默认保护级别EncryptSensitiveWithUserKey 对文本文件中的密码进行加密。这只能在加密它的同一用户下解密(就是你)

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

不好的解决方法是设置您的 SQL 代理以自己运行。这是一个坏主意,所以我不会对此进行详细介绍。

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

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

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

  1. 确保所有 SQL Server 连接管理器都使用 Windows 身份验证
  2. 使用DontSaveSensitive。这是有效的,因为包中没有定义密码
  3. 定义一个 Windows 服务帐户并将其分配给 SQL 代理
  4. 确保此 Windows 服务帐户有权访问数据库

如果您有任何问题,请在 cmets 中发帖。还请更新您的问题,详细说明您正在使用哪种连接管理器。 (SQL Server?Oracle?Excel?)

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-05
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      相关资源
      最近更新 更多