繁体   English   中英

不从 SQL Server 代理运行时出现 SSIS 平面文件文件夹权限错误

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

设置:一个非常标准的数据导出 SSIS 包(与 SQL Server 2016 兼容),在 VS2019/Data Tools 中创建并使用 SSIS 项目部署模型部署到 SQL Server 2016 实例的集成服务目录。 该程序包在通过 FTP 将文件发送出去之前在网络文件夹中创建文件并将文件的副本放入已Sent文件夹中。

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

当前行为:从配置了 SQL 代理和凭据的 SQL Server 代理作业运行时,程序包行为正确,凭据映射到具有网络文件夹适当权限的域登录名。

问题:使用以下任何方法直接运行包时,数据流任务无法创建文件并显示“无法打开数据文件”错误(即使“当前”会话使用与 SQL Server 凭据相同的凭据/ SQL Server 代理作业使用的代理):

  • 使用 SSMS 右键单击​​包并选择执行
  • 使用 DTEXEC SQL 实用程序
  • 使用 SSISDB.catalog.start_execution SQL Server 存储过程

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

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

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

替代方法 #2:将包使用的所有文件夹更改为指向 SQL Server 实例的本地文件夹,然后使用有效凭据创建单独的计划任务/应用程序/任何内容,将文件同步或移动到其正确的网络文件夹.

即使“当前”会话使用与 SQL Server 代理作业使用的 SQL Server 凭据/代理相同的凭据

这可能是因为该帐户未在 SQL Server 本地登录,因此这是一个双跳模拟场景,并且需要配置 Kerberos 约束委派。

你在评估选项时是正确的。 一般的解决方案是从 SQL Server 上运行的会话中调用catalog.start_execution ,代理作业是执行此操作的最简单的内置方法(其他方法是 xp_cmdshell、Service Broker Activation 或 SQL CLR)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM