如何将 Open *** 进程置于 SSIS 任务控制流中
Posted
技术标签:
【中文标题】如何将 Open *** 进程置于 SSIS 任务控制流中【英文标题】:How to put Open *** process in an SSIS task control flow 【发布时间】:2016-06-24 13:35:48 【问题描述】:我正在学习如何使用 SSIS 创建自动计划任务。一切都很顺利,直到安全政策发生变化。每当我想连接到数据库之前,我只需在 SSIS 连接管理器中输入 IP 地址、用户名和密码。 现在我需要先打开 Open***,这仍然是一个手动过程。所以我真的很想把这一点放到一个 SSIS 任务流中。
我在 *** 和其他一些网站上进行了搜索。这是***中的link。这个例子给出了我们可以使用 VBA 来设置链接的想法。但是,该示例显示我们需要一个 *** 连接名称和 *** 用户名,我实际上并没有,也不知道在哪里可以找到。每次我只需右键单击 .o*** 文件并选择 在此配置文件上启动 open***。此外,当我打开该 .o*** 文件时,没有指示哪个是我的连接名称或用户名的命令。这是我打开它时的样子(这个文件中没有 -auth-user-pass
东西,我可以使用这个文件而无需指定它):
client
dev tun
proto udp
remote a website here 1111
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca ca.crt
cert office.crt
key office.key
askpass login.txt
是否可以找到我的连接名称和用户名?如果我不需要连接名和用户名,我还可以写VBA来建立一个自动连接过程吗?
我还注意到 SSIS 中有一个execute process task
。是否有可能我可以使用它(因为在我的理解中显然我使用 open***.exe 来执行 .o*** 文件)?
如果我说错了什么,请纠正我,因为我是 *** 和 SSIS 的新手。非常感谢任何可以帮助我的人。
【问题讨论】:
umm.. 看到最后一行“askpass login.txt”了吗?我认为...在您的计算机中搜索您应该找到用户名和密码的文本文件...我认为...也许 ;) @Ricardo C 之前没有那行,我每次都必须将密码复制并粘贴到黑色提示窗口中。所以我创建了那个文件,它只包含一个密码(从其他网站的其他人那里得知)。感谢您的评论:) “我的密码”你说的?就像我的Windows密码一样?伙计,听起来您的 Open*** 正在使用 Active Directory 进行身份验证。在这种情况下,您的用户名和密码就是您用于登录计算机的用户名和密码,即您的 Windows 用户名和密码。 哦,抱歉,这不是真正的“我的密码”。它只是一个登录 Open*** 的密码,完全不同。很抱歉我的误导性陈述 您链接到的 SO 问题/答案使用不同的 *** 工具(根据代码判断,称为 RASDIAL)。因此,如果您打算使用 Open***,那里使用的参数无关紧要。您是否查看过 Open*** 的文档以获取命令行选项?有没有办法在指定配置文件时启动它?如果你能做到这一点,那么在 SSIS 脚本任务中对该命令行进行 Shell-ing 就可以了,这会给你留下输入密码的问题。请用任何进一步的信息更新问题。 【参考方案1】:我对 Open*** 一无所知,但不久前我遇到了类似的问题,服务器坚持使用 PuTTY 作为唯一允许的连接方法的 SSH 隧道。
制定这些政策的人从不考虑对 SSIS 的影响,尤其是无人值守处理。
我找到的解决方案是:
-
找到与 PuTTy 客户端等效的命令行(称为 plink)
手头有详细的文档,因为这真的很难。
让SSIS包启动plink.exe,传递各种参数(注意:不要使用Execute Process任务,因为它等待进程退出:在Script任务中启动进程,并获取plink的句柄.exe 的 ProcessID)。
等待后,让 SSIS 中的另一个脚本任务连接到 plink 进程的 InputBuffer,“输入”密码。是的,不安全且笨拙,尽管您可以加密存储 SSIS 项目参数(这显然需要 SSIS 2012 或更高版本)
-
SSIS 包现在可以连接到服务器并处理数据,就像它是没有愚蠢访问要求的普通服务器一样。
在包结束时,杀死 plink.exe 进程。
同时请记住,在无人参与的情况下执行(例如,在作业中安排时),您的程序包将在与您开发程序包时所使用的安全上下文不同的安全上下文中运行(取决于 SSIS 服务设置)。如果您对 Open*** 的访问对 ActiveDirectory 有任何依赖,您可能需要为 SSIS 服务的登录用户设置另一个 Open*** 帐户。
如果这听起来很可怕、极其复杂且不稳定,那是因为它确实如此。实际上,TL;DR 版本是:告诉管理服务器的人,如果他们真的希望您使用 SSIS 访问它,他们应该制定一些更明智的访问策略。
【讨论】:
【参考方案2】:在与我的 IT 同事合作后,我认为我解决了问题。这是我对这个问题的回答和看法,如果我错了,请纠正我。
我认为自动打开 *** 是一个个案问题。在这种情况下,我仍然在 SSIS 中使用 Execute Process Task。在任务编辑器里面,我们执行的不是open***.exe,应该是一个批处理文件。在批处理文件(.bat 文件)中包含使用 Open***.exe 打开 .o*** 文件的命令
下面的过程为您提供更详细的信息。
命令行是我在批处理文件中使用的:
@echo off
CD /D "C:\Program Files\Open***\config"
start open*** client.o***
TIMEOUT /T 10
exit
在 SSIS 中执行进程任务
希望对你有用
【讨论】:
以上是关于如何将 Open *** 进程置于 SSIS 任务控制流中的主要内容,如果未能解决你的问题,请参考以下文章
SSIS 错误:尝试向数据流任务缓冲区添加行失败,错误代码为 0xC0047020
如何使用 Uvicorn 和 asyncio.create_task() 将任务置于后台?