2015-08-31 57 views
-1

我想直接從sql使用gpg2來加密我將發送給外部供應商的xml文件。我可以在沒有錯誤的情況下創建xml文件和ftp,但在嘗試使用gpg2命令加密文件時遇到了問題。使用來自xp_cmdshell的gpg2

我有一個存儲過程,回聲的命令到一個.txt文件,然後我用xp_cmdshell執行該文件。我是這樣設計的,這樣我就可以動態地創建命令,具體取決於你想要加密的文件名。

這是我寫入文本文件的命令,以便我可以執行它。從SQL框的命令行調用時,該命令可以正常工作,但在xp_cmdshell中不起作用。

"C:\Program Files (x86)\GNU\GnuPG\gpg2" --recipient FTPUser --output C:\FTP\Outgoing\test.gpg --batch --encrypt C:\FTP\Outgoing\SomeFile.xml

這裏是信息:

GPG:名爲ftpuser:跳過:不公鑰GPG:

C:\ FTP \傳出\ SomeFile.xml:加密失敗:公鑰

gpg4win(2.2.5)程序直接安裝在我的SQL 2008R2框中,並且我已經完成了生成過程然後使用FTPUser帳戶對其進行簽名。我可以在SQL中執行xp_cmdshell命令時將消息轉儲到臨時表中。結果是上面的兩條消息。

從SQL調用時是否還需要使用另一個gpg2命令?我試圖搜索互聯網,但它已被證明是徒勞的。

+0

只是猜測,也許當用'xp_cmdshell'執行它不能達到所需的環境變量。在執行腳本之前,請檢查一下手冊中的GPG2需要什麼樣的環境變量(如PATH等)並提供它們'SET name = ...'。 – lad2025

+0

運行'SET |更多'從命令行和cmdshell進行比較 – lad2025

回答

0

我已經找到了這個問題。我們有一個單獨的Windows帳戶運行我們的SQL Server服務。由於該帳戶是啓動命令的帳戶,因此我必須確保在該帳戶下的db服務器上設置密鑰。當我第一次設置它時,我使用管理員帳戶進行了設置。由於這與xp_cmdshell用於啓動命令的帳戶不同,因此無法在該帳戶下找到公鑰。將密鑰添加到適當的帳戶後,所有功能都正常運行。