使用 dtutil 部署加密的 SSIS 包

问题描述 投票:0回答:1

我有一个程序包,它使用服务帐户连接到 Oracle 服务器,并且用户名/密码存储在程序包中。因此,该包设置为 ProtectionLevel=EncryptSensitiveWithPassword。我尝试使用 dtutil 命令行实用程序(包括带有包密码的 /Decrypt 参数)将包推送到具有 Azure DevOps 管道的服务器。这是命令行(我用“xxxxx”替换了敏感信息):

dtutil /FILE Proto_Fleet_Direct_Parts_WO_Vendor_Extract.dtsx /解密 xxxxx /COPY SQL;Proto_Fleet_Direct_Parts_WO_Vendor_Extract /Q /DestS xxxxx

当我执行此命令时,出现此错误:

由于错误 0xC0011008“从 XML 加载时出错。无法为此问题指定更详细的错误信息,因为没有传递可存储详细错误信息的 Events 对象,因此无法加载程序包。”。当 CPackage::LoadFromXML 失败时会发生这种情况。

作为故障排除步骤,我删除了包密码并将 ProtectionLevel 设置为 EncryptSensitiveWithUserKey。然后包加载到服务器时不会出现错误,但当然它在运行时会出错,因为服务器帐户的用户密钥与我不同。

解决方法是使用具有访问 Oracle 服务器所需权限的链接服务器。这将允许我从包中删除服务帐户并将其设置为 EncryptSensitiveWithUserKey。但是,我们目前没有该链接服务器,我们的 DBA 指示我在走这条路线之前先尝试让其他方法发挥作用。

sql-server ssis
1个回答
0
投票

事实证明我们的问题是密码本身。该密码有两个特殊字符,即“%”和“&”,它们是 Windows 命令行中的保留字符。由于您不能将密码放在引号中,因此密码中的一个(或两个)特殊字符将由命令行解释。我将密码更改为使用不同的未保留的特殊字符,然后 dtutil 命令起作用。我想您也可以转义这些特殊字符而不是更改密码,但我没有尝试这样做。

我想分享解决方案,以防它可以帮助其他人。

© www.soinside.com 2019 - 2024. All rights reserved.