当DB记录符合某些条件时,我需要实现一个从SQL Server数据库运行程序的工具。有办法吗?
答案 0 :(得分:4)
我会小心使用xp_cmdshell,因为它可能会造成很大的安全漏洞。看看这篇文章 http://www.databasejournal.com/features/mssql/article.php/3372131/Using-xpcmdshell.htm
如果服务帐户具有本地管理权限,则可以使用此过程执行任何Windows操作系统命令。
看看我前段时间问过的类似问题。经过一些研究后,我认为生产数据库服务器的安全风险太大了。您的情况可能会有所不同,xp_cmdshell可能就是答案。 SQL Server xp_cmdshell
答案 1 :(得分:3)
xp_cmdshell是一个安全问题,也是一个设计问题(使SQL Server运行其他应用程序并不是一个真正的快乐环境,即使它可以被迫这样做)。请不要采取触发器建议 - 这是最糟糕的主意。我首先要做的是修改或创建要运行的程序的包装器,以便轮询数据库以获取符合条件的行,然后使用它们。如果需要,在db中创建一个表作为要处理的行的队列,或者使用一列来指示进程完成的行。
答案 2 :(得分:2)
您可以使用xp_cmdshell
启动程序http://msdn.microsoft.com/en-us/library/aa260689(SQL.80).aspx
答案 3 :(得分:1)
从触发器运行进程是一种可疑的做法。您的交易将一直阻止,直到该流程启动并完成。此外,该进程保证无法安全地读取它导致启动它的记录,因为它被锁定在等待进程终止的事务中。
执行此操作的正确方法是检测触发器中的条件,将通知排入队列并让提交后读取器将通知出列并启动该过程。所有这些都可以在Transact-SQL中完成。
<强>更新强>
当我说'在Transact-SQL中完全可行'时,我指的是Service Broker和activation:触发器SEND向本地服务发送消息,可能描述了该消息的关键字更新了符合条件的项目,在提交消息激活过程后,激活的过程将读取消息并启动xp_cmdshell以使用适当的参数运行该工具。激活的程序has the rights to run xp_cmdshell because is properly signed。该工具在更新后的几毫秒内运行,但是从一个不会阻止更新/插入/删除的完全安全的上下文中运行。