sql - 包含 SQL 身份验证的 SSIS 在 IDE 中运行,但在 SQL Server 代理作业中失败
问题描述
我有一个 SSIS 包,它从平面文件中获取数据并将其写入 SQL。它在 OLEDB 连接中使用 Windows 身份验证的 IDE 中运行良好。但我希望任何人都可以运行它,而不是使用我的 Windows 身份验证设置,所以我将身份验证更改为 SQL Auth。当我在 SQL Job 中运行这个包时,它失败了,但在 IDE 中运行良好。会有什么问题?
我的包级别 ProtectionLevel 是:EncryptSensitiveWithUserKey
我是否需要将 ProtectionLevel 更改为 EncryptSensitiveWithPassword?
这是我得到的错误:无法解密受保护的 XML 节点“DTS:Password”,错误为 0x8009000B“密钥在指定状态下无效。”。您可能无权访问此信息。当存在加密错误时会发生此错误。验证正确的密钥是否可用。
最糟糕的是,我现在恢复为在 Windows Auth 本身中运行,但现在我遇到了一个奇怪的错误 -
以用户身份执行:。适用于 64 位的 Microsoft (R) SQL Server 执行包实用程序版本 12.0.4100.1 版权所有 (C) Microsoft Corporation。版权所有。开始时间:上午 10:46:00 错误:2019-08-15 10:46:09.43 代码:0xC0209303 源:Import_Freight_Data 连接管理器“源 Excel (xls) 文件”描述:请求的 OLE DB 提供程序 Microsoft.Jet.OLEDB.4.0未注册。如果未安装 64 位驱动程序,请在 32 位模式下运行该软件包。错误代码:0x00000000。OLE DB 记录可用。来源:“Microsoft OLE DB 服务组件”Hresult:0x80040154 描述:“类未注册”。结束错误错误:2019-08-15 10:46:09.43 代码:0xC020801C 源:从 xls 文件源获取数据 - XLS 文件导入 [96] 描述:SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“Source Excel (xls) File”的 AcquireConnection 方法调用失败,错误代码为 0xC0209303。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。结束错误错误:2019-08-15 10:46:09.43 代码:0xC0047017 源:从 xls 文件 SSIS.Pipeline 获取数据描述:源 - XLS 文件导入验证失败并返回错误代码 0xC020801C。结束错误错误:2019-08-15 10:46:09.43 代码:0xC004700C 来源:从 xls 文件 SSIS.Pipeline 获取数据描述:一个或多个组件验证失败。End Error 错误:2019-08-15 10:46:09.43 代码:0xC0024107 来源:从 xls 文件中获取数据 描述:任务验证期间出现错误。结束错误 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:上午 10:46:00 结束时间:上午 10:46:09 经过时间:8.906 秒。包执行失败。步骤失败。
解决方案
当您使用 EncryptSensitiveWithUserKey 时,SSIS 将使用您的 Windows 身份作为身份验证手段解密敏感值。当此作业在 SQL 代理中运行时,它不再在您的帐户下运行,并且无法解密密码。
您可以使用 EncryptSensitiveWithPassword,但这意味着当您从 SQL 代理调用包时,您需要以明文形式存储包密码。一些更可取的选择是:
- 使用 windows auth,但在代理下运行包。更多信息在这里:https ://community.spiceworks.com/how_to/129293-configure-an-ssis-package-to-execute-as-a-proxy-account
- 使用包配置在运行时设置密码。更多信息在这里:https ://docs.microsoft.com/en-us/sql/integration-services/lesson-5-add-ssis-package-configurations-for-the-package-deployment-model?view=sql -server-2017
米
推荐阅读
- r - 如何用来自另一个数据框的列注释列
- c - 如何访问结构中不是第一个的元素 - Qsort
- c++ - 无法更改 OpenCV 视频捕获分辨率
- android - Android WebView 和听筒上的音频输出
- c++ - C ++在字符串向量中查找字符串的频率
- java - 从java中的另一个线程中断一个线程?
- java - 在列表中找到 lenghtOfArgument 与 Java 中的 lambda
- python - 如何使返回布尔值不打印?
- javascript - 在 Javascript 中创建淡入/淡出效果
- google-workspace - 无法授予管理员权限 Google IAM 和管理员