Включить SQL Server «xp_cmdshell» - PullRequest
       1

Включить SQL Server «xp_cmdshell»

169 голосов
/ 27 февраля 2011

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

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

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

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

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

Ответы [ 7 ]

355 голосов
/ 27 февраля 2011

Вам необходимо включить его.Ознакомьтесь с разделом Разрешения документов xp_cmdshell MSDN :

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
37 голосов
/ 30 апреля 2014

Вы также можете скрыть расширенный параметр после перенастройки:

-- 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
14 голосов
/ 15 ноября 2016

Щелкните правой кнопкой мыши по серверу -> Фасеты -> Конфигурация поверхности -> XPCmshellEnbled -> true enter image description here

9 голосов
/ 24 апреля 2015

Как указано в других ответах, хитрость (в 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 год).

4 голосов
/ 18 ноября 2015

Хотя принятый ответ будет работать большую часть времени, я встречал (до сих пор не знаю, почему) некоторые случаи, которые не работают.Небольшая модификация запроса с использованием WITH OVERRIDE в 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. Запустите оператор RECONFIGURE для установки.

0 голосов
/ 07 ноября 2018

Для меня единственным способом на SQL 2008 R2 было следующее:

EXEC sp_configure 'Show Advanced Options', 1    
RECONFIGURE **WITH OVERRIDE**    
EXEC sp_configure 'xp_cmdshell', 1    
RECONFIGURE **WITH OVERRIDE**
0 голосов
/ 18 января 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...