Как выполнить пакетные сценарии внутри хранимых процедур? - PullRequest
2 голосов
/ 11 апреля 2011

Я делаю работу по интеграции через хранимую процедуру.Поэтому, когда я получаю сообщение об ошибке, мне нужно перенести мои файлы в другое место.

У меня есть пакетный файл Windows, и мне нужно выполнить этот пакетный файл с помощью хранимой процедуры, а это значит, что мне нужен запросвнутри этой хранимой процедуры, чтобы выполнить этот пакетный файл.Любое предложение?

Ответы [ 2 ]

0 голосов
/ 15 августа 2011

Это:

exec master..xp_cmdshell 'c:\path\file.bat'

Должно работать нормально, если включен xp_cmdshell, согласно коду Ocaso. Конечно, xp_cmdshell - это маленький страшный зверь, который должен быть включен, только если все остальные опции были исчерпаны. Рассмотрим этот очень страшный пакетный файл, для существования:

@ECHO OFF
REM Database info
REM User must have xp_cmdshell exec privileges
SET "user=username"
SET "pass=password"
set "servername=192.168.1.100"
set "database=database_name"
IF EXIST thiscmd.sql DEL /F /Q thiscmd.sql

ECHO SET NOCOUNT ON > thiscmd.sql
ECHO create table #result (outputrow varchar(200)) >> thiscmd.sql
ECHO Insert into #result >> thiscmd.sql
ECHO exec master..xp_cmdshell '%~1' >> thiscmd.sql
ECHO declare @thisline varchar(200) >> thiscmd.sql
ECHO declare output_cursor CURSOR FOR  >> thiscmd.sql
ECHO select * from #result >> thiscmd.sql
ECHO OPEN output_cursor >> thiscmd.sql
ECHO FETCH NEXT FROM output_cursor into @thisline >> thiscmd.sql
ECHO WHILE @@FETCH_STATUS = 0 >> thiscmd.sql
ECHO BEGIN >> thiscmd.sql
ECHO    print @thisline >> thiscmd.sql
ECHO    FETCH NEXT FROM output_cursor into @thisline >> thiscmd.sql
ECHO END >> thiscmd.sql
ECHO CLOSE output_cursor >> thiscmd.sql
ECHO DEALLOCATE output_cursor >> thiscmd.sql
ECHO drop table #result >> thiscmd.sql

.\osql -n -U%user% -P%pass% -S%servername% -d%database% -w200  -i thiscmd.sql

IF EXIST thiscmd.sql DEL /F /Q thiscmd.sql

Предполагая, что предоставленные имя пользователя и пароль имеют доступ к xp_cmdshell, этот пакетный файл, по сути, дает вам удаленную командную строку, работающую как любой пользователь, владеющий службой SQL. Это означает, что если кто-то скомпрометировал одного пользователя SQL, он скомпрометировал весь сервер. У меня есть аналогичные командные файлы, которые автоматизируют сетевые команды для перемещения файлов туда-сюда, и я гарантирую, что любой злоумышленник, достойный его / ее соли, тоже будет.

TL; DR: используйте с осторожностью! xp_cmdshell ОПАСЕН.

0 голосов
/ 11 апреля 2011

Вы можете использовать xp_cmdshell, например, xp_cmdshell 'dir *.*'

Возможно, вам нужно активировать этот SP:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...