当来自 SQL Server Agent 的 NOT 运行 时,SSIS 平面文件夹权限错误

SSIS flat file folder permission error when NOT running from SQL Server Agent

设置: 一个非常标准的数据导出 SSIS 包(SQL Server 2016 兼容),在 VS2019/Data 工具中创建并使用 SSIS 项目部署进行部署模型到 SQL Server 2016 实例的 Integration Services Catalog。该软件包在通过 FTP 发送文件并将文件副本放入 Sent 文件夹之前在网络文件夹中创建文件。

项目要求包括使用“默认”参数值按计划运行安装包,以及允许用户使用“非默认”参数值手动运行包来自独立应用程序。

当前行为: 当 运行 来自配置有 SQL 代理的 SQL 服务器代理作业并且凭据映射到具有网络文件夹适当权限的域登录名。

问题:数据流任务创建文件失败并出现“无法打开数据文件”错误运行直接使用以下任何方法打开包方法(即使“当前”会话使用与 SQL 服务器代理作业使用的 SQL 服务器 Credentials/Proxy 相同的凭据):

据我所知,只有这些方法能够启动 SSIS 包 更改包的参数值。我要么需要让后两种方法中的一种起作用,要么找到另一个允许在启动包时更改参数值的选项,要么使用我知道的两种技术中的一种(详见下文),这会增加另一个失败指出流程以及其他潜在问题。

注意:如果流程更改为最初在SQL服务器的本地硬盘驱动器上创建文件,则数据流任务成功,但稍后复制到Sent 文件夹任务失败并出现非常相似的权限错误。

备选方案 #1: 此技术需要创建一个新的 table,将参数值加载到 table,更改包以检查 table 并可能根据它找到的内容将其设置为 parameters/variables。然后可以使用 SQL 服务器代理作业启动该包(有多种方法可以手动启动它们),如果调用对象已正确填充 table,该包的行为就好像它是参数在 运行 时更改,否则它将 运行 使用默认值。

备选方案 #2: 将包使用的所有文件夹更改为指向 SQL 服务器实例的本地文件夹,然后创建一个单独的预定 task/application/whatever],使用有效凭据,这会将文件同步或移动到其正确的网络文件夹。

even when the "current" session is using the same credentials as the SQL Server Credentials/Proxy used by the SQL Server Agent Job

这可能是因为该帐户未在 SQL 服务器本地登录,因此它是双跃点模拟方案,需要配置 Kerberos 约束委派。

您对选项的评估是正确的。一般的解决方案是从 SQL 服务器上的会话 运行 调用 catalog.start_execution,代理作业是执行此操作的最简单的内置方法(其他方法是 xp_cmdshell、Service Broker 激活或 SQL CLR)。