Лучший способ для файлов SFTP или FTPS через SSIS

Первоначально в этом вопросе задавался вопрос, какой метод загрузки файлов через SFTP или FTPS в SSIS является наилучшим. Теперь он просто перечисляет плюсы и минусы каждого решения. Я лично использую библиотеку SFTP от CozyRoc в наши дни, но я использовал каждое из нижеприведенных решений в тот или иной момент.

БИБЛИОТЕКА КОМПОНЕНТОВ SSIS

Метод: установите библиотеку компонентов SSIS из CozyRoc, Codeplex, BizCrypto, PragmaticWorks или другого поставщика на каждый сервер разработки и производства и используйте задачу SFTP для загрузки файлов.

Плюсы: Простота использования. Он выглядит, пахнет и ощущается как обычная задача SSIS. SSIS также распознает пароль как конфиденциальную информацию и позволяет использовать все обычные варианты защиты конфиденциальной информации вместо того, чтобы просто хранить ее в виде открытого текста небезопасным образом. Хорошо работает с другими задачами SSIS, такими как контейнеры циклов ForEach. Ошибки выдают при сбое загрузки и выгрузки. Хорошо работает, когда вы не знаете имена файлов на удаленном FTP-сайте для загрузки или когда вы не знаете имя файла для загрузки до времени выполнения.

Минусы: За исключением решения Codeplex, лицензирование в производственной среде стоит денег. Требуется установка библиотек на каждую машину разработки и производства. Если это решение Codeplex, значит, вы используете программное обеспечение, которое не поддерживается каким-либо конкретным поставщиком. Это также заставляет вас зависеть от поставщика в обновлении своих библиотек между каждой версией. Например, до выпуска RTM 2008 года я разрабатывал новый сервер на CTP-версии 2008 года, и библиотека CozyRoc 2005 была несовместима с ним. В конце концов они выпустили версию, совместимую с 2008 годом, но мне пришлось временно использовать решение командной строки, чтобы обойти эту проблему.

ПРОГРАММА SFTP КОМАНДНОЙ СТРОКИ

Метод: установите бесплатное приложение SFTP из командной строки, такое как Putty и WinSCP, и выполните его, запустив пакетный файл или задачу процесса операционной системы. Инструкции для этого через WinSCP перечислены в здесь.

Плюсы: бесплатно, бесплатно и бесплатно. Вы можете быть уверены, что это безопасно, если вы используете Putty, поскольку многие FTP-клиенты с графическим интерфейсом, похоже, используют Putty под прикрытием. Вы ОПРЕДЕЛЕННО знаете, что используете SSH2, а не SSH.

Минусы: две утилиты командной строки, которые я пробовал (Putty и Cygwin), требовали хранения пароля SFTP в небезопасном месте. Я не нашел хорошего способа фиксировать сбои или ошибки при загрузке файлов. Процесс не выглядит и не пахнет SSIS. Большая часть кода инкапсулирована в текстовые файлы, а не в сам SSIS. Трудно использовать, если вы не знаете точное имя файла, который вы загружаете или скачиваете.

БИБЛИОТЕКА С 3 СТОРОНЫ C# или VB.NET

Метод: установите библиотеку SFTP или FTPS и используйте задачу сценария, которая ссылается на библиотеку, для загрузки файлов. (Никогда не пробовал, поэтому угадываю плюсы и минусы)

Плюсы: Вероятно, легко обнаруживать ошибки. Должен хорошо работать с переменными, поэтому его, вероятно, будет легко использовать, даже если вы не знаете точное имя файла, который вы загружаете или скачиваете.

Минусы: это задача сценария в сочетании с библиотеками .NET. Если вы используете SSIS, то вам, вероятно, удобнее решать задачи SSIS, чем код .NET. Задачи сценария также трудно устранять, поскольку они не имеют тех же инструментов и функций отладки, что и обычные проекты .NET. Создает зависимость от стороннего кода, который может не работать между разными версиями SQL Server. Честно говоря, это, вероятно, БОЛЬШЕ будет работать между разными версиями SQL Server, чем сторонняя библиотека задач SSIS. Еще один огромный минус - я еще не нашел бесплатную библиотеку C# или VB.NET, которая бы это делала. Так что, если кто-нибудь знает об одном, дайте мне знать!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
31
0
62 711
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Может быть полезен следующий вопрос:

Какой компонент SSIS рекомендуется выбрать для выполнения задачи SFTP или FTPS?

Козырок:

Должно быть легко проверить доступность протокола ssh, настроив сервер на «разрешать только SSHv2» и проведя тестирование. Вы пробовали спросить у отдела продаж Кози?

Командная строка sftp:

Проблема с неизвестным именем файла может быть решена простым скриптом / использованием подстановочных знаков (по крайней мере, в Cygwin).

Сторонняя библиотека:

Зачем вам нужна сторонняя библиотека для FTPS? .NET поддерживает этот протокол примерно с 2.0.

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

Для бесплатных решений FTPS выглядит хорошо, за исключением случаев, когда мне приходится использовать SFTP. Поскольку я предпочел бы иметь одну архитектуру для обработки обоих сценариев, я, вероятно, полагаюсь на командную строку sftp. Для платных решений CozyRoc, SecureBlackBox и Rebex выглядят неплохо. Спасибо!

Registered User 04.01.2009 20:41

Я просто хотел предоставить обновленную информацию о том, что мы на самом деле решили сделать для решения проблем с SFTP в SSIS. Вот разбивка того, что произошло:

  1. Сначала я пробовал использовать Putty и некоторые командные файлы для загрузки файлов, но было сложно зафиксировать ошибки. Кроме того, я хранил наши учетные данные SFTP в текстовых файлах, поскольку они были частью сценариев загрузки Putty.

  2. Мы приобрели лицензию CozyRoc для нашего сервера SSIS за пару сотен долларов в год, и я полностью доволен результатами использования их продукта. С продуктом CozyRoc задача потока управления вызывает ошибки, если есть какие-либо проблемы с загрузкой. Поскольку в моей команде также есть несколько младших программистов SSIS, им было легче понять, как настроить задачу потока управления, чем использовать метод сценариев Putty. И, наконец, пароль зашифрован с использованием собственного шифрования SSIS для защиты конфиденциальных данных. У меня больше нет паролей, хранящихся в открытом виде на моем сервере.

Я просмотрел некоторые другие сторонние библиотеки, которые были рекомендованы в этом вопросе, но, похоже, CozyRoc был самым дешевым из поставщиков, и у них также было несколько других задач SSIS, которые я смог использовать в моей команде BI. Спасибо, CozyRoc!

Без компонента вы можете использовать задачу скрипта. См. эта ссылка

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

Простое наименование ваших переменных с префиксом sftp не делает его sftp ...

Martin Smith 28.09.2014 01:16

Другие вопросы по теме