【发布时间】:2015-08-31 12:54:48
【问题描述】:
我正在尝试直接从 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 命令吗?我曾尝试搜索互联网,但它已被证明是徒劳的。
【问题讨论】:
-
只是猜测,也许当使用
xp_cmdshell执行时,它无法访问所需的环境变量。检查手册 GPG2 需要哪些环境变量(如 PATH 等)并在执行脚本之前提供它们SET name=...。 -
从命令行和cmdshell运行
SET | more并比较
标签: sql-server-2008 encryption command-line gnupg xp-cmdshell