У нас есть устаревшая хост-система AS400, которая работает на нашем складе.Мы хотим, чтобы он безопасно запускал задания на сервере SQL, на котором работает остальная часть бизнеса, чтобы обеспечить автоматический и своевременный обмен данными между двумя системами.
В настоящее время у нас установлено клиентское программное обеспечение IBM iSeries Access для Windows, установленное настарый сервер Windows SQL 2005Это позволяет AS400 запускать удаленные команды в окне Windows.AS400 использует это клиентское программное обеспечение для запуска пакетных файлов, которые выполняют dtexec
на сервере SQL 2005, который затем запускает пакеты служб SSIS, которые обмениваются данными между AS400 и производственными серверами SQL.Блок SQL 2005 просто действует как переход между AS400 и производственными серверами SQL.Две проблемы с этой настройкой:
Программное обеспечение клиента AS400 запускается как системный процесс, а не как сетевая учетная запись, поэтому информация для входа в SQL должна быть включена в простой текст в SSISфайлы.
При запуске dtexec
он добавляет две записи в журнал событий Windows.У нас есть несколько процессов, которые опрашивают новые данные каждые несколько минут или в некоторых случаях секунды, поэтому журнал событий последовательно удаляет старые записи, что оставляет около 4 часов событий.Сказать, что это затрудняет поиск и устранение ошибок в этом окне, было бы преуменьшением.
Мы выводим из эксплуатации старую коробку сервера SQL 2005, поэтому я должен повторить эту функцию на более новом сервере.Я хочу решить эти два вопроса, прежде чем сделать это.
Я пытался использовать sqlcmd
, но, поскольку программное обеспечение клиента AS400 работает в локальном системном процессе, оно не может подключиться к рабочим серверам SQL, которые настроены в режиме аутентификации Windows.Я попытался использовать psexec
, который работает, если я оставляю сеанс RDP открытым для пользователя, но ему все равно нужно, чтобы имя пользователя и пароль были в виде простого текста.Я проверял, что пакетный файл записывает пустой каталог в каталог и что задание SQL запускается событием WMI.В тестировании это работает, но ненадежно, когда задание должно быстро запускаться несколько раз подряд, как и в большинстве наших заданий.
Я также изучал использование C # и .NET для храненияпароль с использованием классов безопасности Windows и / или API защиты данных (DPAPI), но я в лучшем случае являюсь промежуточным программистом .NET, поэтому для меня это худший вариант решения.
Это должно быть распространенной проблемой при интеграциистарые хост-системы с SQL Server, поэтому я предполагаю, что должно быть решение, позволяющее хост-системе вызывать SQL-сервер безопасным способом.Если не задание напрямую, запустите хранимую процедуру, которая может запустить задание.Любая альтернатива, которая не требует пароля / имени пользователя, сохраненного где-либо в виде простого текста и не использующего dtexec
, будет принята с благодарностью.