【问题标题】:using gpg2 from xp_cmdshell使用 xp_cmdshell 中的 gpg2
【发布时间】: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


【解决方案1】:

我已经解决了这个问题。我们有一个单独的 Windows 帐户来运行我们的 SQL Server 服务。由于该帐户是启动命令的帐户,因此我必须确保在该帐户下的数据库服务器上设置了密钥。当我第一次设置它时,我是在管理员帐户下进行的。由于这不是 xp_cmdshell 用于启动命令的帐户,因此它无法在该帐户下找到公钥。将密钥添加到正确的帐户后,一切正常。

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多