我们有一个传统的AS400主机系统来运行我们的仓库。我们希望它能够安全地触发运行业务其余部分的SQL服务器上的作业,以支持两个系统之间的自动和及时的数据交换。
目前,我们已经在旧的Windows 2005服务器上安装了软件。这允许AS400在Windows上运行远程命令。AS400使用此客户端软件运行批处理文件,在server 2005服务器框上执行dtexec
,然后运行SSIS包,在AS400和生产AS400服务器之间交换数据。SQL 2005框只是在AS400和生产SQL服务器之间运行。此设置的两个问题是:
dtexec
时,它会向Windows日志中添加两个条目。我们有几个进程每隔几分钟就轮询一次新数据,在某些情况下是秒,所以事件日志不断地清除旧的条目,这将留下大约4小时的事件。如果这么说,就很难排除此框中的错误,这是一种轻描淡写。我们正在退役旧的SQL 2005服务器框,因此我必须在较新的服务器上复制此功能。在此之前,我想先谈谈这两个问题。
我尝试过使用sqlcmd
,但是由于AS400客户端软件是在本地系统进程下运行的,所以它无法连接到使用设置的生产SQL服务器。我尝试使用psexec
,如果我将一个RDP会话留给用户打开,但仍然需要用户名和密码来使用纯文本,它就能工作。我一直在测试如何让批处理文件将空白文件写入目录,并由WMI事件触发SQL作业。在测试过程中,这是可行的,但在需要连续多次快速触发作业时,这是不可靠的,就像我们的大多数作业一样。
我还研究过如何使用C#和.NET来使用Windows类和/或数据保护API (DPAPI)来存储密码,但我充其量是一个中级.NET程序员,所以这是一个更糟糕的解决方案。
在将旧主机系统与Server集成时,这必须是一个常见的问题,因此我假设必须有一种解决方案,允许主机系统在安全方法中调用SQL服务器。如果不是直接执行作业,则运行可触发作业的存储过程。如果您不需要在某个地方以纯文本保存密码/用户名而不使用dtexec
,您将不胜感激。
发布于 2019-05-23 18:14:27
LocalSystem帐户“在本地计算机上具有广泛的特权,并充当网络上的计算机。
这意味着您可以通过为“计算机帐户”创建登录名来授予它对远程SQL服务器的访问权限。如果您的服务器名为MyServer
,并且域为MyDomain
,那么:
use msdb
create login [MyDomain\MyServer$] from windows
create user [MyDomain\MyServer$] for login [MyDomain\MyServer$]
alter role SQLAgentOperatorRole add member [MyDomain\MyServer$]
在另一台服务器上作为LocalSystem运行的进程将能够通过连接并运行SQL作业。
https://stackoverflow.com/questions/56282737
复制相似问题