我正在尝试直接从sql使用gpg2来加密我将发送给外部供应商的xml文件。我可以创建xml文件和ftp而不会出错,但在尝试使用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 \ Outgoing \ SomeFile.xml:加密失败:没有公钥
gpg4win(2.2.5)程序直接安装在我的SQL 2008R2盒子上,我已经完成了生成密钥的过程,然后使用FTPUser帐户对它们进行签名。在SQL中执行xp_cmdshell命令时,我能够将消息转储到临时表中。结果是上面的两条消息。
从SQL调用时是否需要使用另一个gpg2命令?我试过搜索互联网,但事实证明它是徒劳的。
答案 0 :(得分:0)
我已经弄明白了这个问题。我们有一个单独的Windows帐户来运行我们的SQL Server服务。由于该帐户是启动命令的帐户,因此我必须确保在该帐户下的数据库服务器上设置密钥。当我第一次设置它时,我是在管理员帐户下完成的。由于这与xp_cmdshell用于启动命令的帐户不同,因此无法在帐户下找到公钥。将密钥添加到正确的帐户后,一切正常运行。