Sql server SSIS:通过SQL Server代理作业访问Sharepoint UNC

Sql server SSIS:通过SQL Server代理作业访问Sharepoint UNC,sql-server,sharepoint,ssis,unc,sql-server-agent,Sql Server,Sharepoint,Ssis,Unc,Sql Server Agent,我有一个SSIS包连接,该连接通过UNC路径连接到Sharepoint站点,如下所示: \\[Site URL]\DavWWWRoot\sites\DTS_BURM\DARBenchmarks\FileName.csv 我的包读取文件并将其导入SQL DB。此过程在VS中运行良好。但是,如果我想在作业中从SQL Server代理运行包,它将向我提供以下错误: 导入原始数据:错误:无法打开数据文件“[Site URL]\davwwroot\sites\DTS\u BURM\DARBenchmar

我有一个SSIS包连接,该连接通过UNC路径连接到Sharepoint站点,如下所示:

\\[Site URL]\DavWWWRoot\sites\DTS_BURM\DARBenchmarks\FileName.csv
我的包读取文件并将其导入SQL DB。此过程在VS中运行良好。但是,如果我想在作业中从SQL Server代理运行包,它将向我提供以下错误:

导入原始数据:错误:无法打开数据文件“[Site URL]\davwwroot\sites\DTS\u BURM\DARBenchmarks\FileName.csv”

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


即使在所有这些之后,我仍然收到一个错误,声明它“无法打开数据文件”。我不确定我还能做些什么,如果有人有建议,我将不胜感激。

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

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

  • 您需要SQL server的管理员权限,或者需要管理SQL server的人以管理员身份登录和运行PowerShell
  • 然后运行以下命令并对任何提示显示“是”:
  • 在线安装模块SharePointPnPowershell

  • 如果在连接关闭或无法通信的情况下运行该命令时出错,则可能与PowerShell中未启用的Tls12有关。运行以下命令以启用Tls12协议:
  • [Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12

  • 然后再次运行“安装模块SharePointPnPowershellOnline”,现在应该成功了
  • 完成此操作后,我们将专门为此设置一个服务帐户,并发现该帐户需要属于您正在下载文件的SharePoint网站的“网站所有者”组

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

    $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
    }
    

    然后将SSI配置为访问本地文件。

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