SSIS 代理/凭据在 SQL 代理作业步骤中不起作用

Gre*_*DBA 7 ssis sql-server-2012 proxy

我一直在环顾四周,发现了类似的问题,但没有具体说明我遇到的问题。

问题: 我无法正确配置 SSIS 代理和 SQL 凭据以模拟运行 SSIS 包的 SQL 代理作业步骤的受限访问服务帐户。受限访问服务帐户拥有所有需要的权限,并且程序包设计正确。我已经阅读了很多关于这个主题的材料,如果我错过了什么,我希望得到一些帮助。

背景:( 在 Windows Server 2012 R2 上运行的 SQL 2012 SP3 服务器。SQL 引擎在 Domain1\Admin1 下运行,SQL 代理在 Domain1\Admin2 下运行。两者都在 SYSADMIN 服务器角色中。)

我们有一个 SSIS 包,它在由 SYSADMIN 交互式运行时运行良好,并且在作为“SQL Server 代理服务帐户”的作业步骤中运行时也运行良好。然而,我们的安全小组希望我们使用仅限于工作需要做的凭据运行,无论如何我认为这是最佳实践。我读过的所有内容都表明 SSIS 代理和凭据将有助于解决此要求;但是我无法使配置工作,所以我一定是做错了什么。

该包通过 SSIS 包作业步骤运行。它是一个本地文件,未部署到 MSDB 或 SSISDB。该包连接到网络共享,加载到 SQL 服务器本地的数据库中,截断一个表,运行一些存储过程,然后删除 XLS 文件。作业步骤设置为使用 32 位运行时。

安全创建了一个帐户 (Domain1\NewUser),该帐户将拥有网络共享的修改权限。我还要求他们将 Domain1\Admin2 作为修改添加到同一共享中。

对于设置,我仅使用 Public 角色为 Domain1\NewUser 创建了一个 SQL 登录名,并将其添加为有问题的数据库的 db_owner,因为程序包需要执行的操作范围。我使用 Domain1\NewUser 帐户和用户帐户的确切工作密码作为其身份创建了一个凭据(BatchLoad-credential)。然后,我使用 BatchLoad-credential 凭证创建了一个 SSIS 代理(BatchLoad-Proxy),在 SSIS 包子系统中处于活动状态,并将 Domain1\NewUser 的 SQL 登录添加为代理帐户主体。然后我将运行 SSIS 包的 SQL 代理作业步骤更改为作为 BatchLoad-Proxy 运行,并将作业的所有者从 Domain1\Admin2 更改为 Domain1\NewUser 帐户。

当作业运行时,我们收到此错误(对日志进行了一些屏蔽):

以用户身份执行:Domain1\NewUser。Microsoft (R) SQL Server 执行包实用程序版本 11.0.6020.0,适用于 32 位 版权所有 (C) Microsoft Corporation。版权所有。开始时间:下午 12:46:17

错误:2016-06-24 12:46:28.56 代码:0xC0202009 来源:xxxxxxx_xxxx 连接管理器“yyyyyyyyyyy”描述:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft Office Access 数据库引擎” Hresult:0x80004005 描述:“外部表不是预期的格式。”。结束错误

同样,当 SYSADMIN 在 BIDS 中以交互方式运行包时,包工作正常,因此我们知道文件格式正确,包设计正常。

我没有网络共享的权限。当我尝试手动连接时,出现类似错误:

Windows cannot access
\\<path to the network share>
Error code: 0x80004005
Unspecified error
Run Code Online (Sandbox Code Playgroud)

使用 Domain1\NewUser 帐户和密码连接到网络共享,我可以正常查看文件夹,因此我已验证正确的用户帐户具有访问权限。

Gre*_*DBA 2

我很感谢对此的反馈,我希望这对将来的人们有所帮助。我终于缩小了问题的真正根本原因。我没有提供有关使用 Excel 文件这一事实的足够详细信息。禁用包中的所有内容后,如果我仅使用 Excel 源启用数据流任务,则会出现失败,但仅限于使用 SSIS 代理(使用 Domain1\NewUser 帐户启动作业)时。如果我将作业步骤设置为使用 SQL Server 代理帐户,则一切都会正常工作。

解决这个问题一段时间后,我尝试使用 NewUser1 凭据登录服务器,并第一次运行 Excel。它提示我输入缩写,然后我关闭了程序。我还将该帐户添加到服务器的本地管理员组中,以便我可以使用 RDP。

然后我使用 SSIS 代理运行该作业,一切正常。当我从本地管理员组中删除该帐户时,它会再次失败,但我确定这是在该成员身份中授予的本地策略“作为批处理作业登录”。

以下是我从这次经历中学到的东西:

  1. SQL 凭据只能模拟用户帐户,而不能模拟组。SSIS 代理是为批处理作业授予必要权限的有效解决方案。Excel(可能还有其他应用程序)可能需要使用相关凭据启动一次,只是为了完成服务器上用户配置文件中的应用程序设置。运行 DTExec 的代理需要作为批处理作业登录才能从文件系统启动包。Excel 源有问题,当不是布局/格式问题时,OLE DB 驱动程序可能会报告此问题:

Hresult: 0x80004005 描述:“外部表不是预期的格式。”