【问题标题】:SSIS package can't access directory when run on SQL ServerSSIS 包在 SQL Server 上运行时无法访问目录
【发布时间】:2019-06-19 16:06:14
【问题描述】:

我正在运行一个 SSIS 包,其中包含一个用于检查文件是否存在的脚本。

当我在我的 Windows 凭据下在 Visual Studio 中运行它时,它工作正常并且可以在目录中找到该文件并具有访问权限。

当我将包部署到 SQL Server 上并运行它(仍然在我的 Windows 凭据下,我什至将它们打印在脚本中的日志消息中)时,它无权访问该目录。

注意:我不是在代理作业中运行它,而是直接在 SQL Server Management Studio 的集成服务包下运行它。

编辑:数据库保存在远程服务器上,当我登录该服务器并在那里使用管理工作室时,它一切正常。如果我在我的机器上以我的身份连接到远程服务器,但它不会

有人知道为什么吗?

【问题讨论】:

  • 它是一台远程机器,我已经在包中放置了消息但是说它正在以我的身份运行,Environment.UserName 以我的身份出现,无论我是否在远程机器上运行它(Sql server management studio ) 或在我的 Visual Studio 机器上
  • 您使用什么任务来检查文件是否存在(脚本任务或 bat 文件)?您如何检查文件是否存在?
  • 这听起来像是 kerberos 双跳问题。请发布访问文件的确切错误。
  • 仅使用 C# 脚本,我首先使用 File.Exists 检查它是否存在,如果不存在,我检查目录的权限。在我的机器上在 VS 上运行良好,但在 SQL 管理工作室中出现异常
  • 我认为您需要检查哪个帐户在服务中运行 SQL Server 代理,并使用该帐户授予对该帐户的文件夹访问权限,根据我的经验,我更喜欢使用个人帐户来运行 SQL Server代理,。

标签: sql-server ssis etl


【解决方案1】:

尝试为 SQL 数据库引擎服务帐户NT SERVICE\MSSQL$<Instance Name> 授予读/写权限(其中<Instance Name> 应替换为已安装的实例名称)

【讨论】:

  • 假设 2 台计算机安装了具有相同实例名称的 sql。那么,NT SERVICE\InstanceName 是网络中所有计算机通用的帐户还是每台计算机唯一的帐户?我想了解它是本地帐户还是共享网络帐户?
  • @variable 检查此链接:superuser.com/questions/884988/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
相关资源
最近更新 更多