2009-01-03 20 views
30

Diese Frage ursprünglich gefragt, welche die beste Methode für das Hochladen von Dateien via SFTP oder FTPS in SSIS ist. Es listet jetzt nur die Vor- und Nachteile jeder Lösung auf. Ich persönlich benutze CosyRocs SFTP-Bibliothek in diesen Tagen, aber ich habe jede der folgenden Lösungen an der einen oder anderen Stelle verwendet.Beste Methode, um SFTP oder FTPS-Dateien über SSIS

SSIS COMPONENT BIBLIOTHEK

Methode: Installieren Sie eine SSIS-Komponenten-Bibliothek von CozyRoc, Codeplex, BizCrypto, PragmaticWorks oder ein anderen Anbieter auf jedem Entwicklungs- und Produktionsserver und verwenden Sie die SFTP Aufgabe, die Dateien zu.

Vorteile: Einfach zu bedienen. Es sieht, riecht und fühlt sich an wie eine normale SSIS-Aufgabe. SSIS erkennt das Kennwort auch als vertrauliche Informationen und ermöglicht Ihnen alle normalen Optionen zum Schutz der vertraulichen Informationen, anstatt sie nur im Klartext auf nicht sichere Weise zu speichern. Funktioniert gut mit anderen SSIS-Aufgaben wie ForEach Loop Containers. Fehler beim Upload und Download fehlgeschlagen. Funktioniert gut, wenn Sie die Namen der Dateien auf der Remote-FTP-Site, die heruntergeladen werden soll, nicht kennen oder wenn Sie den Namen der Datei, die bis zur Laufzeit hochgeladen werden soll, nicht kennen.

Nachteile: Mit Ausnahme der Codeplex-Lösung kostet dies Lizenzkosten in einer Produktionsumgebung. Erfordert die Installation der Bibliotheken auf jeder Entwicklungs- und Produktionsmaschine. Wenn es sich um die Codeplex-Lösung handelt, verwenden Sie Software, die von keinem bestimmten Anbieter unterstützt wird. Dies macht es auch abhängig von dem Hersteller, ihre Bibliotheken zwischen den einzelnen Versionen zu aktualisieren. Zum Beispiel habe ich vor dem RTM 2008 einen neuen Server in einer CTP-Version von 2008 entwickelt und die CozyRoc 2005-Bibliothek war damit nicht kompatibel. Schließlich veröffentlichten sie eine 2008 kompatible Version, aber ich musste vorübergehend die Befehlszeilenlösung verwenden, um dieses Problem zu umgehen.

BEFEHLSZEILEN SFTP PROGRAM

Methode: Installieren einer Anwendung frei Befehlszeilen SFTP wie Putty und WinSCP und führen es entweder durch eine Batch-Datei oder ein Betriebssystemprozessaufgabe ausgeführt wird. Anweisungen dazu über WinSCP sind aufgeführt here.

Vorteile: Kostenlos, kostenlos und kostenlos. Sie können sicher sein, dass es sicher ist, wenn Sie Putty verwenden, da zahlreiche GUI-FTP-Clients scheinen, Putty unter den Abdeckungen zu verwenden. Sie wissen DEFINATIV, dass Sie SSH2 und nicht SSH verwenden.

Nachteile: Die beiden Befehlszeilendienstprogramme (Putty und Cygwin), die ich versuchte, erforderten das Speichern des SFTP-Kennworts an einem nicht sicheren Speicherort. Ich habe keine gute Möglichkeit gefunden, Fehler oder Fehler beim Hochladen von Dateien zu erfassen. Der Prozess sieht und riecht nicht wie SSIS. Der Großteil des Codes ist in Textdateien anstatt in SSIS selbst eingekapselt. Schwer zu verwenden, wenn Sie den genauen Namen der Datei, die Sie hochladen oder herunterladen, nicht kennen.

eine 3rd-Party C# oder VB.NET BIBLIOTHEK

Methode: Installieren Sie einen SFTP oder FTPS Bibliothek und ein Script Task verwenden, die die Bibliothek verweist auf die Dateien zu. (Ich habe das nie probiert, also werde ich die Vor- und Nachteile erraten)

Pros: Wahrscheinlich einfach Fehler zu erfassen. Sollte gut mit Variablen arbeiten, so wäre es wahrscheinlich einfach zu verwenden, auch wenn Sie nicht den genauen Namen der Datei wissen, die Sie hochladen oder herunterladen.

Nachteile: Es ist eine Skriptaufgabe in Kombination mit .NET-Bibliotheken. Wenn Sie SSIS verwenden, sind Sie wahrscheinlich besser mit SSIS-Aufgaben als .NET-Code vertraut. Skriptaufgaben sind ebenfalls schwer zu beheben, da sie nicht über die gleichen Debugging-Tools und -Funktionen wie normale .NET-Projekte verfügen.Erstellt eine Abhängigkeit von Code von Drittanbietern, der möglicherweise nicht zwischen verschiedenen Versionen von SQL Server funktioniert. Um fair zu sein, ist es wahrscheinlich eher möglich, zwischen verschiedenen Versionen von SQL Server als eine SSIS-Task-Bibliothek von Drittanbietern zu arbeiten. Eine weitere große Konsequenz - ich habe noch keine freie C# - oder VB.NET-Bibliothek gefunden, die das bisher macht. Wenn also jemand davon weiß, dann lass es mich wissen!

Antwort

9

Die folgende Frage könnte von Nutzen sein:

What would be a recommended choice of SSIS component to perform SFTP or FTPS task?

CozyRoc:

Es sollte einfach SSH-Protokoll der Verfügbarkeit zu prüfen, indem die Server-Einstellung und Prüfung auf "nur SSHv2 erlauben" . Haben Sie versucht, Cosy's Sales Dept zu fragen?

Befehlszeilen SFTP:

Das unbekannte Dateiname Problem einfache Skript/Verwendung von Wildcards gelöst werden könnte (zumindest unter Cygwin).

3rd-Party-lib:

Warum benötigen Sie einen Dritten lib für FTPS? .NET hat dieses Protokoll seit 2.0 oder so unterstützt.

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.enablessl.aspx

+0

Für freie Lösungen sieht FTPS gut aus, außer wenn ich SFTP verwenden muss.Da ich für beide Szenarien lieber eine Architektur hätte, würde ich mich wahrscheinlich auf die Befehlszeile sftp verlassen. Für bezahlte Lösungen sehen CosyRoc, SecureBlackBox und Rebex allesamt gut aus. Vielen Dank! –

2

Ich wollte nur auf ein Update geben, was wir beschlossen, tatsächlich zu tun, um die SFTP Probleme in SSIS zu lösen. Hier ist die Aufschlüsselung von dem, was passiert ist:

  1. Ich versuchte zunächst mit Putty und einige Batch-Dateien, Dateien hochzuladen, aber es war schwierig, Fehler zu erfassen. Außerdem speicherte ich unsere SFTP-Anmeldeinformationen in Klartextdateien, da es Teil der Putty-Upload-Skripts war.

  2. Wir haben eine CozyRoc-Lizenz für unseren SSIS-Server für ein paar hundert Dollar pro Jahr gekauft und ich bin vollkommen zufrieden mit den Ergebnissen der Verwendung ihres Produkts. Mit dem CozyRoc-Produkt löst die Kontrollfluss-Aufgabe Fehler aus, wenn es Probleme mit dem Upload gibt. Da ich auch mehrere Junior-SSIS-Programmierer in meinem Team habe, war es für sie leichter zu verstehen, wie man die Kontrollfluss-Aufgabe aufsetzt, als die Putty-Skripten-Methode zu verwenden. Und schließlich wird das Passwort mit der nativen SSIS-Verschlüsselung zum Schutz sensibler Daten verschlüsselt. Ich habe keine Passwörter mehr im Klartext auf meinem Server gespeichert.

habe ich einige der anderen 3rd-Party-Bibliotheken überprüfen, die in dieser Frage empfohlen wurden, aber es scheint CozyRoc die billigste der Anbieter war, und sie hatten auch ein paar andere SSIS Aufgaben, die ich in der Lage gewesen zu verwenden in meinem BI-Team. Danke, CosyRoc!

-3

Ich empfehle dies SSIS SFTP component. Sie haben einen Artikel, der veranschaulicht, wie man es in SSIS verwendet

+2

Broken Link - hat es einen Namen? – PeterX

-3

Ohne Komponente können Sie Skriptaufgabe verwenden. Siehe this link

Imports System 
Imports Microsoft.SqlServer.Dts.Runtime 
Imports Ftp 
Imports System.IO 

Public Class ScriptMain 

    Public Sub Main() 

     Try 

      Dim cm As ConnectionManager = Dts.Connections.Add("FTP") 
      cm.Properties("ServerName").SetValue(cm, Dts.Variables("SFTPServerName").Value.ToString) 
      cm.Properties("ServerUserName").SetValue(cm, Dts.Variables("SFTPLogin").Value.ToString) 
      cm.Properties("ServerPassword").SetValue(cm, Dts.Variables("SFTPPassword").Value.ToString) 
      cm.Properties("ServerPort").SetValue(cm, Dts.Variables("SFTPPortNumber").Value.ToString) 
      cm.Properties("Timeout").SetValue(cm, "0") 
      cm.Properties("ChunkSize").SetValue(cm, "0") '1000 kb 
      cm.Properties("Retries").SetValue(cm, "0") 
      Dts.Variables("Continue").Value = 0 

      Dim ftp As FtpClientConnection = New FtpClientConnection(cm.AcquireConnection(Nothing)) 
      Dim FilesList() As String 
      Dim FolderName() As String 

      Dim Separator As String = ";" 
' \\ServerName\Share1;\\ServerName\Share2 : Local copy 
      Dim FolderLocalListSrc As String = Dts.Variables("FolderLocalListSrc").Value.ToString 
      Dim FolderLocalListDst() As String = Split(FolderLocalListSrc, Separator) 
      Dim Counter As Integer 

      ftp.Connect() 
      ftp.GetListing(FolderName, FilesList) 

      If FilesList IsNot Nothing Then 

       Dim FileName As String 

       For Each FileName In FilesList 

        Dim FileToProcess(0) As String 
        Dim FileToMove(0) As String 

        For Counter = 0 To FolderLocalListDst.GetUpperBound(0) 

         FileToProcess(0) = FileName 
         FileToMove(0) = FolderLocalListDst(Counter) + FileName 

         If (File.Exists(FileToMove(0)) = False) Then 

          ' Téléchargement en local 
          ftp.ReceiveFiles(FileToProcess, FolderLocalListDst(Counter), True, True) 

         End If 

        Next 

        ' Upload du fichier dans les archives du FTP 
        ftp.SendFiles(FileToMove, "/Archives", True, False) 

        ' Suppression du fichier à la racine du FTP 
        ftp.DeleteFiles(FileToProcess) 

       Next 

      End If 

      ftp.Close() 

      Dts.TaskResult = Dts.Results.Success 
     Catch ex As Exception 
      Dts.TaskResult = Dts.Results.Failure 
     End Try 

    End Sub 

End Class 
+4

Wenn Sie Ihre Variablen nur mit einem sftp-Präfix benennen, wird es nicht sftp ... –

2

Die folgenden script eine Option sein kann, anstatt die Zugangsdaten des Sparens in eine Klartextdatei mit WINSCP.

Verwandte Themen