xp_cmdshell 中的 gpg 加密

gpg encryption in xp_cmdshell

我正在尝试在 sql server 2012xp_cmdshell 命令中使用 gpg 加密 .csv 文件。 当我通过 xp_cmdshell 使用 gpg 时,它说 gpg 不被识别为内部或外部命令。 但这在 windows cmd 上非常有效。 我应该如何配置我的 sql 服务器来接受这个命令。请指教。

select @encrypt = 'gpg -e -r ' + @sEncryptionKey+ ' '+ @sPath + @tempdataFolder+'\'+ @sFileName 

exec master..xp_cmdshell @encrypt

要纠正您在上面指出的错误,只需在您的代码中添加 gpg.exe 的完整路径。

select @encrypt = 'c:\gpg\gpg.exe -e -r ' + @sEncryptionKey+ ' '+ @sPath + @tempdataFolder+'\'+ @sFileName 

exec master..xp_cmdshell @encrypt

相比之下,这是我过去通过 SSIS 完成此操作的方式;请确保您提供了可执行文件的准确完整路径...我们在此示例中使用的是 gpg4win (gpg2.exe)。

您可能还想将每个参数包装在“”中,以便更好地处理带空格的文件 names/paths。

DECLARE @sKeyEmail VARCHAR(100), @sInFile VARCHAR(100), @sOutFile VARCHAR(100), @SQL VARCHAR(1000)

SET @sInFile = 'c:\temp\somefile.xls'
SET @sOutFile = 'c:\temp\somefile.xls.gpg'
SET @sKeyEmail = 'user@domain.com'


SET @SQL = 'EXEC master.dbo.xp_cmdshell ''C:\Progra~1\GNU\GnuPG\gpg2 -o ' +@sOutFile+ ' -e -r ' +@sKeyEmail + ' ' +@sInFile+ ''''

PRINT @SQL
-- EXEC sp_execute @SQL