【问题标题】:SSIS: Accessing Sharepoint UNC via SQL Server Agent JobSSIS:通过 SQL Server 代理作业访问 Sharepoint UNC
【发布时间】:2020-08-27 15:15:24
【问题描述】:

我有一个 SSIS 包连接,它连接到带有 UNC 路径的 Sharepoint 站点,如下所示:

\\[Site URL]\DavWWWRoot\sites\DTS_BURM\DARBenchmarks\FileName.csv

我的包读取文件并将其导入 SQL DB。这个过程在 VS 中运行良好。但是,如果我想在作业中从 SQL Server 代理运行包,它会给我提供以下错误:

导入 RAW 数据:错误:无法打开数据文件“[Site URL]\DavWWWRoot\sites\DTS_BURM\DARBenchmarks\FileName.csv”。

最初这对我来说似乎很明显。运行 SQL 作业的帐户无权访问 SharePoint。因此,我在 Credentials 文件夹中添加了一个服务帐户,然后使用这些凭据为 SQL Server 代理创建代理。此外,我将该服务帐户作为所有者添加到 SharePoint,因此它具有读/写权限。

即便如此,我仍然收到一条错误消息,指出“无法打开数据文件”。我不确定我还能做什么,如果有人有建议,将不胜感激。

【问题讨论】:

  • 您能否从 SQL Server 计算机打开该路径? SharePoint不是文件服务器。它公开了一个 WebDAV 端点,可以被 Windows 视为“网络共享”提供Web Folders 服务正在运行
  • @PanagiotisKanavos 不幸的是,我不允许远程进入 SQL Server 机器进行测试。
  • 你怎么知道 WebDAV 会在那个服务器上运行?
  • @PanagiotisKanavos 我没有,为了进一步说明这一点,如果我以服务帐户身份登录 SSMS 并运行“EXEC master.dbo.xp_fileexist [PATH]”,它将显示该目录没有该帐户存在。你知道解决办法吗?我愿意接受其他方法来实现我的目标。
  • 没有访问权限以作为您的服务帐户登录服务器,您将无法使其正常工作。即使可以,也不稳定。您必须在服务器上安装“WebDav Redirector”,将 sharepoint 站点添加到 IE 中的受信任列表中,登录 sharepoint 并勾选“记住我”,等等……但在某些时候,sharepoint 会要求您重新进行身份验证。花了几个星期整理出来。我们只是在代理作业步骤中使用 power shell 脚本在运行 SSIS 之前将文件下载到本地。这必须是 sql2014 或更高版本,因为 sql 代理使用的是什么版本的 powershell。

标签: sql-server sharepoint ssis unc sql-server-agent


【解决方案1】:

正如我在评论中提到的,在将 SharePoint UNC 与 SSIS 一起部署到服务器时,我们没有太多运气或稳定性。我们最终在代理作业步骤中使用 PowerShell 脚本在 SSIS 步骤之前将文件下载到本地。

由于代理使用的 PowerShell 版本以及需要安装 SharePoint 模块,这仅适用于 SQL Server 2014 或更高版本。

  1. 您需要拥有 SQL 服务器或管理它的任何人的管理员权限才能以管理员身份登录并运行 PowerShell。

  1. 然后对任何提示运行以下命令,并带有“是”:

安装模块 SharePointPnPPowerShellOnline

  1. 如果您在运行该命令时遇到连接关闭或无法通信的错误,这可能与 PowerShell 中未启用的 Tls12 有关。运行以下命令启用 Tls12 协议:

[Net.ServicePointManager]::SecurityProtocol =[Net.SecurityProtocolType]::Tls12

  1. 然后再次重新运行“Install-Module SharePointPnPPowerShellOnline”,现在应该可以成功了。

在您完成此操作后,我们专门为此设置了一个服务帐户,并发现该帐户需要属于您从中下载文件的 SharePoint 网站的“网站所有者”组。

然后使用以下代码添加 PowerShell 代理作业步骤以下载 SSIS 本地文件。为您的环境更新。

$SharepointBaseURL = "https://yoursharepoint.com/sites/sitename/" #base URL of your site
$SharepointDocumentFolder = "Shared Documents/path to folder" #path to the folder where the files are located

$LocalShare = "\\server\localshare"  #where you download local, sql proxy account needs access


$un = "YourAccount@domain.com"
$pw = "Password"

Set-Location "c:\"  #we had to have this when running in agent job

try
{
    $sp = $pw | ConvertTo-SecureString -AsPlainText -Force
    $plainCred = New-Object system.management.automation.pscredential -ArgumentList $un, $sp

    Connect-PnPOnline -Url $SharepointBaseURL -Credentials $plainCred -ErrorAction Stop
    $SharePointFileList = Get-PnPFolderItem -FolderSiteRelativeUrl $SharepointDocumentFolder -ItemType File #gets a list of all files in the sharepoint directory

    foreach ($File in $SharePointFileList)
    {
        Get-PnPFile -Url $File.ServerRelativeUrl -Path $LocalShare -Filename $File.Name -AsFile -ErrorAction Stop #Add "-Force" parameter if you want to override if the file already exists
    }

}
Catch
{
    Throw $_.Exception.Message #any errors/exceptions this bubbles it out into job history
}

然后从那里配置 SSIS 以访问本地文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2015-01-30
    相关资源
    最近更新 更多