清空Excel文件权限问题:SSIS Excel目标通过C:\ Users \ Default缓冲大型记录集

通过DTEXEC.EXE从Web应用程序调用SSIS包。 该程序包使用文件系统任务来制作要用作Excel目标文件的Excel模板文件的副本。 然后,数据流任务将记录从OLE DB源发送到Excel目标。 然后,Excel目标文件将流式传输回Web应用程序用户的浏览器。

当Web应用程序池标识是本地管理员帐户时,此方法正常。 当Web应用程序池标识是恰好以交互方式登录的受限用户时,它也可以工作。

当Web应用程序池标识是未同时登录的受限用户时,会遇到问题。 仍然可以正确返回小的Excel文件(几百行)。 没问题。 大型Excel文件(几万行)将返回空。 流式文件中没有返回给用户浏览器的行。 写在服务器上的目标文件也是空的。

SSIS包没有看到错误,并报告通过数据流传递了数万条记录。 这不是SQL Server端的权限问题。 当用户帐户被赋予SQL Server sysadmin时,它仍然无法将任何行写入更大的Excel目标文件。

这看起来像是Windows端的权限问题,可能涉及将缓冲区写入磁盘,这就是为什么只处理几百行时不会出现问题的原因。

希望通过增加DefaultBufferMaxRows(10,000行)和DefaultBufferSize(10 MB)的数据流任务设置来避免磁盘缓冲。 但是,不幸的是,这不起作用。

这是一个已解决的问题,可以帮助任何可能遇到类似问题的人。

使用进程监视器显示ISServerExec.exe正在尝试将缓冲区保存到C:\ Users \ Default \ AppData \ Local \ Microsoft \ Windows \ Temporary Internet Files。 当有限的用户帐户在C:\ Users \ Default下获得访问权限时,一切正常。

这解释了为什么交互式登录用户或本地管理员帐户能够将数据流记录写入Excel文件,但是常规批量登录无法执行此操作。 这是SSIS Excel目标的不良行为。

SSIS包在BIDS中正常工作,用于加载超过5000行的excel文件,但在代理帐户下的SQL Server代理作业中运行相同的包时失败。 这样做的主要原因是对于大文件SSIS进程使用C:\ Users \ Default位置来缓冲数据。 因此,代理帐户需要对此文件夹位置进行写访问。 在此之后,套件在JOB中也能正常工作……