Включить' xp cmdshell ' SQL Server



Я хочу, чтобы выполнить EXEC master..xp_cmdshell @bcpquery



, но я получаю следующую ошибку:




SQL Server заблокировал доступ к процедуре ' sys.xp_cmdshell "компонента " xp_cmdshell", поскольку этот компонент отключен как часть конфигурации безопасности для этого сервера. Системный администратор может включить использование "xp_cmdshell" с помощью процедуры sp_configure. Дополнительные сведения о включении 'xp_cmdshell' см. В разделе" Конфигурация поверхностной области " в книгах SQL Server Онлайн.




есть ли способ активировать это или выполнить что-то перед включением функции?



как ее решить?

2362   6  

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

Правой Кнопкой Мыши сервер -->аспекты-->настройка контактной зоны -->XPCmshellEnbled -->правда enter image description here

как указано в других ответах, трюк (в 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 OVERRIDE in RECONFIGURE решение

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. Выполните перенастройку заявление для установки.

вы можете сделать с помощью SQLcmd. вы выполнили следующую команду. enter image description here

Comments

    Ничего не найдено.