为啥从目录执行 ssis 包时访问文件路径被拒绝消息

Posted

技术标签:

【中文标题】为啥从目录执行 ssis 包时访问文件路径被拒绝消息【英文标题】:Why getting an access to file path denied message when executing ssis package from catalog为什么从目录执行 ssis 包时访问文件路径被拒绝消息 【发布时间】:2016-06-17 11:29:51 【问题描述】:

我浏览了很多帖子,但还没有找到解决方案。我花了好几天的时间...我有一个项目,其中包含一个带有参数的包,作为处理的一部分,将文件从文件服务器移动到数据库服务器,反之亦然。它在 ssdt 上运行良好。我使用项目部署将其部署到 SQL Server 2012 ssisdb。在此之前,我将参数映射到 ssdt 端的配置值,看来我可以在服务器上使用这些,因此(还)不需要设置环境变量。当我通过服务器上的 ssms 执行包时,我得到“访问路径...被拒绝”。我的理解是,该程序包将使用我的凭据执行(因为我在 ssms 上使用我的凭据)——而且,正如我之前所说,这与我在 ssdt 上的凭据一起工作得很好。我已经检查了文件和共享的权限。我已确认我已添加到 Dcomcnfg - 安全 - 启动和激活权限。

【问题讨论】:

它是否设置为 SQL 作业?正如你所说,我怀疑它使用的是不同的登录名,比如没有访问权限的 sql server admin 帐户。 这不是作为作业设置的。我只是想从目录中运行它。我还确保 sql server 管理员帐户具有适当的文件权限,尽管很明显我的凭据正在被使用。 【参考方案1】:

今天早上我以管理员身份重新启动 ssms 时,程序包成功运行,没有出现“访问路径...被拒绝”错误。我确认否则我会收到错误消息。

【讨论】:

顺便说一句,如果我在我的机器上执行包(相对于服务器), - 即使作为管理员,我也会得到'The For Each File 枚举器是空的。 For Each File 枚举器未找到任何与文件模式匹配的文件,或者指定的目录为空。我推测这可能是由于试图在服务器外部运行包 - 即使我是通过通过 ssms 连接到服务器来执行此操作的。如果有人愿意对此发表评论,我会对是或非感兴趣。【参考方案2】:

意识到这是超级老线程;但我今天整天都在遇到这个问题。 SSMS 历史错误日志指出该作业正在作为“NT Service\SQLSERVERAGENT”运行(至少在我的情况下)。我已将 SQLSERVERAGENT 添加到本地管理员组并重新启动服务器(我确信只需重新启动 SQL Server 代理也可以)。

【讨论】:

以上是关于为啥从目录执行 ssis 包时访问文件路径被拒绝消息的主要内容,如果未能解决你的问题,请参考以下文章

通过SSIS将文件导出到sharepoint(UNC) - 拒绝访问

从 ASP.NET 执行 SSIS 包时出错

SSIS 包从文件系统运行

未经授权的访问异常 - 在C#中将文件复制到其他目录时访问被拒绝的路径

c#winForm动态创建文件夹访问被拒绝

“对路径的访问被拒绝.” 是怎么回事