我正在尝试创建一个新作业来自动运行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.
有人知道这个问题吗?
提前致谢
答案 0 :(得分:1)
我假设你有连接管理器到需要用户名和密码的数据库?
有很多关于此的文章,但无论如何我都要解释一下。
简短的回答是:不要在连接管理器中使用登录名/密码。使用Windows身份验证
答案很长;
我们如何存储您的数据库密码以备将来使用?我们当然不希望在包中以明文形式存储它,因为任何拥有pacakge的人都可以窃取密码。包的保护级别指示应如何存储密码。 “以明文保存”不是一种选择
以下是所有密码存储选项(称为保护级别):SSIS Packages Using Package Protection Level
默认保护级别EncryptSensitiveWithUserKey
会加密文本文件中的密码。这只能在加密它的同一用户(即你)
在SQL Agent下运行时,它以不同的用户身份运行,因此密码无法解密,您收到第一条错误消息。
解决方法是错误的想法,就是将SQL代理设置为自己运行。这是个坏主意,所以我不会详细介绍。
然后,您将保护级别更改为DontSaveSensitive
。这通过不保存密码来保护密码。因此,无论您如何运行包,都没有保存密码。这会收到第二条错误消息。
另一个选项是EncryptSensitiveWithPassword
。这会使用密码加密您的密码。再一个坏主意,因为现在你只有另一个密码来管理
我建议你做什么(没有关于你在做什么的任何细节):
DontSaveSensitive
。这是有效的,因为包中没有定义密码如果您有任何疑问,请在评论中发帖。还请更新您的问题,详细了解您正在使用的连接管理器类型。 (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