2016-06-13 4 views
0

Я пытаюсь зашифровать CSV-файл, используя gpg в xp_cmdshell команду в sql server 2012. Когда я использую gpg через xp_cmdshell, он говорит, что gpg не распознается как внутренняя или внешняя команда. Но это отлично работает на windows cmd. Как настроить мой SQL-сервер для принятия этой команды. Пожалуйста посоветуй.gpg encryption в xp_cmdshell

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

exec master..xp_cmdshell @encrypt 

ответ

0

Чтобы исправить ошибку, указанную выше, просто добавьте полный путь к gpg.exe в свой код.

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

exec master..xp_cmdshell @encrypt 

Для сравнения, так я сделал это в прошлом через SSIS; убедитесь, что вы предоставили полный полный путь к исполняемому файлу ... В этом примере мы используем gpg4win (gpg2.exe).

Вы также можете обернуть каждый параметр в "", чтобы лучше обрабатывать имена файлов/пути с пробелами.

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 = '[email protected]' 


SET @SQL = 'EXEC master.dbo.xp_cmdshell ''C:\Progra~1\GNU\GnuPG\gpg2 -o ' [email protected]+ ' -e -r ' [email protected] + ' ' [email protected]+ '''' 

PRINT @SQL 
-- EXEC sp_execute @SQL 
+0

Я получаю сообщение об ошибке, в котором C: \ не распознается как внутренняя или внешняя команда. –

+0

Можете ли вы использовать PRINT @SQL и показать его? – JiggsJedi

+0

ОК, я модифицировал sql, добавив «» к пути, и теперь он выбирает encrypt = '' c: \ Program Files (x86) \ GNU \ GnuPG \ gpg2.exe "-e -r '+ sEncryptionKey +' '+ sPath + tempdataFolder + '\' + sFileName, и теперь я получаю шифрование не с открытым ключом –