我需要實現一個工具,該工具在DB記錄匹配某些條件時從SQL Server數據庫運行程序。有沒有辦法做到這一點?如何從SQL運行程序?
回答
我會小心xp_cmdshell,因爲它可以創造一個安全漏洞。看看這篇文章從 http://www.databasejournal.com/features/mssql/article.php/3372131/Using-xpcmdshell.htm
如果服務帳戶具有本地管理權限,那麼你可以使用此過程來執行任何Windows操作系統命令。
看看我以前問的這個類似的問題。經過一番研究後,我決定安全風險對於生產數據庫服務器來說太大了。你的情況可能不同,xp_cmdshell可能是答案。 SQL Server xp_cmdshell
可以使用xp_cmdshell的
http://msdn.microsoft.com/en-us/library/aa260689(SQL.80).aspx
運行的進程從一個觸發器是一個可疑的實踐啓動程序。您的交易將阻止,直到過程啓動並結束。另外,該進程被保證不能安全地讀取它導致它被啓動的記錄,因爲它被鎖定在等待進程終止的事務中。
執行此操作的正確方法是檢測觸發器中的條件,排隊通知並讓提交後的讀取器將通知出列並啓動進程。所有這些都可以在Transact-SQL中完成。
更新
BTW,當我說「是所有在Transact-SQL可行」我指的是服務代理和activation:觸發SEND SA消息的本地服務,也許是描述的關鍵項目更新與條件相符,在提交消息激活過程後,激活的過程讀取消息並啓動xp_cmdshell以使用適當的參數運行該工具。激活的程序has the rights to run xp_cmdshell because is properly signed。該工具在更新後的毫秒級內運行,但是從完全安全的上下文中進行更新/插入/刪除。
xp_cmdshell是一個安全問題,同時也是一個設計問題(使得SQL Server運行其他應用程序並不是一個真正令人開心的情況,即使它可以被迫這樣做)。請,請不要採取觸發器建議 - 這是最糟糕的主意。我首先要做的是爲要運行的程序修改或創建一個包裝器,以便輪詢數據庫以查找符合條件的行,然後使用它們。如有必要,請在數據庫中創建一個表作爲要處理的行的隊列,或者在列中指示進程完成的行。
- 1. 如何當我運行PL/SQL程序
- 2. 如何從命令行運行程序?
- 3. 如何從VIM運行C程序?
- 4. 如何從node.js程序運行Excel VBA?
- 5. 如何從字符串運行程序?
- 6. 如何從終端運行clojure程序
- 7. 如何從cmd運行程序
- 8. 你如何從Java運行R程序?
- 9. 如何從.Net程序運行Import-PSSession
- 10. 如何從C++程序運行regasm.exe?
- 11. 如何從USB運行程序?
- 12. 如何從MySQL運行程序?
- 13. 如何從終端運行Java程序?
- 14. 如何運行servlet程序?
- 15. 如何運行htmlunit程序
- 16. 如何運行的程序
- 17. 如何運行程序
- 18. 如何運行.dll程序?
- 19. 如何運行子程序
- 20. jvm如何運行程序
- 21. 如何運行此程序?
- 22. 如何運行cgi程序
- 23. 如何運行Java程序
- 24. 如何運行程序
- 25. 如何運行node.js程序
- 26. 如何運行Hadoop程序?
- 27. 如何運行LISP程序
- 28. 如何運行HBase程序
- 29. 如何從SWT應用程序運行SWT應用程序?
- 30. 如何運行的Python程序,從Java程序
這也假定您希望執行的任務應該從SQL/Broker機器運行。如果任務需要外部網絡權限等,一個適當隔離的SQL環境不會讓它「脫身」。 – devstuff 2009-07-22 05:56:16
可以通過憑證以安全的方式細粒度地控制外部訪問,並且可以通過代碼簽名來控制憑證的使用。不是爲了心臟,而是可以實現的。 – 2009-07-22 06:06:08