Включить' xp cmdshell ' SQL Server
Я хочу, чтобы выполнить EXEC master..xp_cmdshell @bcpquery
, но я получаю следующую ошибку:
SQL Server заблокировал доступ к процедуре ' sys.xp_cmdshell "компонента " xp_cmdshell", поскольку этот компонент отключен как часть конфигурации безопасности для этого сервера. Системный администратор может включить использование "xp_cmdshell" с помощью процедуры sp_configure. Дополнительные сведения о включении 'xp_cmdshell' см. В разделе" Конфигурация поверхностной области " в книгах SQL Server Онлайн.
есть ли способ активировать это или выполнить что-то перед включением функции?
как ее решить?
6 ответов:
вы должны включить его. Проверьте раздел Разрешения xp_cmdshell MSDN docs:
http://msdn.microsoft.com/en-us/library/ms190693.aspx:
-- 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
вы также можете снова скрыть расширенный параметр после перенастройки:
-- show advanced options EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO -- enable xp_cmdshell EXEC sp_configure 'xp_cmdshell', 1 GO RECONFIGURE GO -- hide advanced options EXEC sp_configure 'show advanced options', 0 GO RECONFIGURE GO
как указано в других ответах, трюк (в SQL 2005 или более поздней версии) заключается в изменении глобальных параметров конфигурации для
show advanced optionsиxp_cmdshellдо1- в таком порядке.добавляя к этому, если вы хотите сохранить предыдущие значения, вы можете прочитать их из
sys.configurationsво-первых, а затем применить их в обратном порядке в конце. Мы также можем избежать ненужныхreconfigureвызовы:declare @prevAdvancedOptions int declare @prevXpCmdshell int select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = 'show advanced options' select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell' if (@prevAdvancedOptions = 0) begin exec sp_configure 'show advanced options', 1 reconfigure end if (@prevXpCmdshell = 0) begin exec sp_configure 'xp_cmdshell', 1 reconfigure end /* do work */ if (@prevXpCmdshell = 0) begin exec sp_configure 'xp_cmdshell', 0 reconfigure end if (@prevAdvancedOptions = 0) begin exec sp_configure 'show advanced options', 0 reconfigure endобратите внимание, что это зависит от SQL Server версия 2005 или более поздняя (первоначальный вопрос был на 2008 год).
В то время как принятый ответ будет работать в большинстве случаев, я столкнулся (до сих пор не знаю, почему) некоторые случаи, что это не так. Небольшая модификация запроса с помощью
WITH OVERRIDEinRECONFIGUREрешениеUse Master GO EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE GO EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE WITH OVERRIDE GOожидаемый результат
параметр конфигурации "Показать дополнительные параметры" изменен с 0 на 1. Запустите инструкцию RECONFIGURE для установки.
Параметр конфигурации 'xp_cmdshell' изменен с 0 на 1. Выполните перенастройку заявление для установки.


Comments