2009-01-03 36 views
30

Câu hỏi này ban đầu được hỏi là phương pháp tốt nhất để tải lên tệp qua SFTP hoặc FTPS trong SSIS. Nó bây giờ chỉ liệt kê những ưu và nhược điểm của từng giải pháp. Cá nhân tôi sử dụng thư viện SFTP của CosyRoc những ngày này, nhưng tôi đã sử dụng từng giải pháp dưới đây tại một thời điểm này hay cách khác.Phương pháp tốt nhất cho tệp SFTP hoặc FTPS qua SSIS

SSIS COMPONENT THƯ VIỆN

Phương pháp: Cài đặt thư viện thành phần SSIS từ CozyRoc, Codeplex, BizCrypto, PragmaticWorks, hoặc một số nhà cung cấp khác trên mỗi phát triển và sản xuất máy chủ và sử dụng nhiệm vụ SFTP để tải lên các tập tin.

Ưu điểm: Dễ sử dụng. Nó trông, mùi và cảm thấy giống như một nhiệm vụ SSIS bình thường. SSIS cũng nhận ra mật khẩu là thông tin nhạy cảm và cho phép bạn tất cả các tùy chọn bình thường để bảo vệ thông tin nhạy cảm thay vì chỉ lưu trữ nó trong văn bản rõ ràng một cách không an toàn. Hoạt động tốt với các nhiệm vụ SSIS khác như ForEach Loop Containers. Lỗi khi tải lên và tải xuống không thành công. Hoạt động tốt khi bạn không biết tên của các tệp trên trang FTP từ xa để tải xuống hoặc khi bạn không biết tên tệp sẽ tải lên cho đến khi chạy.

Nhược điểm: Ngoại trừ giải pháp Codeplex, điều này tốn tiền để cấp phép trong môi trường sản xuất. Yêu cầu cài đặt các thư viện trên mỗi máy phát triển và sản xuất. Nếu đó là giải pháp Codeplex, thì bạn đang sử dụng phần mềm không được hỗ trợ bởi bất kỳ nhà cung cấp cụ thể nào. Điều này cũng làm cho bạn phụ thuộc vào nhà cung cấp để cập nhật các thư viện của họ giữa mỗi phiên bản. Ví dụ, trước năm 2008 RTM'd, tôi đã phát triển một máy chủ mới trên một phiên bản CTP năm 2008 và thư viện CozyRoc 2005 không tương thích với nó. Cuối cùng họ phát hành một phiên bản tương thích năm 2008, nhưng tôi đã tạm thời sử dụng giải pháp dòng lệnh để giải quyết vấn đề này.

COMMAND LINE SFTP CHƯƠNG TRÌNH

Phương pháp: Cài đặt một dòng lệnh miễn phí SFTP ứng dụng như Putty và WinSCP và thực hiện nó bằng cách chạy một tập tin thực thi hoặc quá trình hệ điều hành nhiệm vụ. Hướng dẫn thực hiện việc này thông qua WinSCP được liệt kê here.

Ưu điểm: Miễn phí, miễn phí và miễn phí. Bạn có thể chắc chắn rằng nó là an toàn nếu bạn đang sử dụng Putty vì rất nhiều GUI FTP khách hàng xuất hiện để sử dụng Putty dưới bìa. Bạn chắc chắn biết bạn đang sử dụng SSH2 chứ không phải SSH.

Nhược điểm: Hai tiện ích dòng lệnh tôi đã thử (Putty và Cygwin) yêu cầu lưu trữ mật khẩu SFTP ở một vị trí không an toàn. Tôi đã không tìm thấy cách tốt để nắm bắt lỗi hoặc lỗi khi tải tệp lên. Quá trình này không nhìn và có mùi giống như SSIS. Hầu hết mã được đóng gói trong các tệp văn bản thay vì bản thân SSIS. Khó sử dụng nếu bạn không biết chính xác tên của tệp bạn đang tải lên hoặc tải xuống.

Một 3RD BÊN C# hoặc VB.NET THƯ VIỆN

Phương pháp: Cài đặt thư viện SFTP hoặc FTPS và sử dụng một công tác Script tham chiếu đến thư viện để tải lên các tập tin. (Tôi đã không bao giờ thử điều này, vì vậy tôi sẽ đoán tại những thuận và chống)

Ưu điểm: Có thể dễ dàng nắm bắt lỗi. Nên làm việc tốt với các biến, vì vậy nó có thể sẽ dễ sử dụng ngay cả khi bạn không biết chính xác tên của tập tin bạn đang tải lên hoặc tải xuống.

Nhược điểm: Đó là tác vụ tập lệnh được kết hợp với thư viện .NET. Nếu bạn đang sử dụng SSIS, thì bạn có thể thoải mái hơn với các tác vụ SSIS sau đó là mã .NET. Các tác vụ kịch bản cũng khó khắc phục vì chúng không có các công cụ và tính năng gỡ lỗi giống như các dự án .NET thông thường.Tạo sự phụ thuộc vào mã của bên thứ ba có thể không hoạt động giữa các phiên bản SQL Server khác nhau. Để công bằng, có thể có khả năng làm việc giữa các phiên bản SQL Server khác với thư viện tác vụ SSIS của bên thứ 3. Một con số rất lớn - Tôi đã không tìm thấy một thư viện C# hoặc VB.NET miễn phí mà thực hiện điều này như được nêu ra. Vì vậy, nếu bất cứ ai biết về một, sau đó xin vui lòng cho tôi biết!

Trả lời

9

Câu hỏi sau đây có thể được sử dụng:

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

Cozyroc:

Nó phải là dễ dàng để kiểm tra tính sẵn sàng giao thức ssh bằng cách thiết lập máy chủ để "cho phép chỉ SSHv2" và thử nghiệm . Bạn đã thử hỏi phòng bán hàng của Cozy chưa?

dòng lệnh sftp:

Vấn đề filename chưa biết có thể được giải quyết đơn giản scripting/sử dụng các ký tự đại diện (ít nhất là dưới Cygwin).

3rd lib bên:

Tại sao bạn cần một lib bên thứ ba cho FTPS? .NET đã hỗ trợ giao thức này từ 2.0 trở lên.

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

+0

Đối với các giải pháp miễn phí, FTPS có vẻ tốt ngoại trừ khi tôi phải sử dụng SFTP.Vì tôi muốn có một kiến ​​trúc để xử lý cả hai kịch bản, có lẽ tôi sẽ dựa vào dòng lệnh sftp. Đối với trả tiền cho các giải pháp, CozyRoc, SecureBlackBox, và Rebex tất cả nhìn khá tốt. Cảm ơn! –

2

Tôi chỉ muốn cung cấp một bản cập nhật về những gì chúng tôi thực sự quyết định phải làm gì để giải quyết các vấn đề SFTP trong SSIS. Dưới đây là chi tiết về những gì đã xảy ra:

  1. Ban đầu tôi đã thử sử dụng Putty và một số tệp lô để tải lên tệp nhưng rất khó để nắm bắt lỗi. Ngoài ra, tôi đã lưu trữ thông tin đăng nhập SFTP của chúng tôi trong các tệp văn bản rõ ràng vì nó là một phần của các tập lệnh tải lên Putty.

  2. Chúng tôi đã mua giấy phép CozyRoc cho máy chủ SSIS của chúng tôi với giá vài trăm đô la một năm và tôi hoàn toàn hài lòng với kết quả sử dụng sản phẩm của họ. Với sản phẩm của CozyRoc, nhiệm vụ kiểm soát luồng sẽ gây ra lỗi nếu có bất kỳ vấn đề gì với quá trình tải lên. Vì tôi cũng có một số lập trình viên SSIS cơ sở trong nhóm của tôi, họ dễ hiểu hơn về cách thiết lập nhiệm vụ kiểm soát luồng hơn là sử dụng phương thức tập lệnh Putty. Và cuối cùng, mật khẩu được mã hóa bằng mã hóa gốc của SSIS để bảo vệ dữ liệu nhạy cảm. Tôi không còn có bất kỳ mật khẩu được lưu trữ trong văn bản rõ ràng trên máy chủ của tôi.

Tôi đã xem xét một số thư viện bên thứ ba khác được đề xuất trong câu hỏi này, nhưng có vẻ như CozyRoc là rẻ nhất của các nhà cung cấp và họ cũng có một số tác vụ SSIS khác mà tôi có thể sử dụng trong nhóm BI của tôi. Cảm ơn, CozyRoc!

-3

Tôi khuyên bạn nên điều này SSIS SFTP component. Họ có một bài viết minh họa cách sử dụng nó trong SSIS

+2

Liên kết bị hỏng - nó có tên không? – PeterX

-3

Nếu không có thành phần, bạn có thể sử dụng tác vụ tập lệnh. Xem 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

Chỉ cần đặt tên biến của bạn với tiền tố sftp không làm cho nó biến mất ... –

2

Sau đây script có thể là một lựa chọn thay vì tiết kiệm các thông tin truy cập nó vào một tập tin văn bản rõ ràng với WinSCP.