Увімкнути "xp_cmdshell" SQL Server


177

Я хочу стратити EXEC master..xp_cmdshell @bcpquery

Але я отримую таку помилку:

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

Чи є спосіб активувати це чи виконати щось перед тим, як активувати функцію?

Як це вирішити?

Відповіді:


370

Вам потрібно це ввімкнути. Перегляньте розділ Дозвіл документів 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

2
Працює по-справжньому, ну просто і ефективно!
indofraiser

2
Обов’язково виконайте SQL Management Studio як адміністратор
Хаїм Раман

Дякую за таку чудову допомогу. Шукали рішення цілими днями.
Мохан Раджпут

2
безпека - Увімкніть, але будьте обережні! мати на увазі: це
Сойєра

39

Ви також можете знову приховати розширений варіант після перенастроювання:

-- 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

19

Клацніть правою кнопкою миші сервер -> Грані -> Конфігурація площі поверхні -> XPCmshellEnbled -> true введіть тут опис зображення


9

Як зазначено в інших відповідях, трюк (в SQL Server 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

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


4

Навіть якщо це питання вирішено, я хочу додати свою пораду щодо цього .... оскільки як розробник я ігнорував.

Важливо знати, що ми говоримо про включений MSSQL xp_cmdshell є критично важливим для безпеки, як зазначено в попередженні повідомлення:

Блок-котирування SQL Server заблокував доступ до процедури 'sys.xp_cmdshell' компонента 'xp_cmdshell', оскільки цей компонент вимкнено як частина конфігурації безпеки цього сервера. [...]

Якщо увімкнути службу, є своєрідною слабкістю , що, наприклад, у веб-додатку може відображати та виконувати команди SQL від зловмисника. Популярний CWE-89 : SQL Injectionце може бути слабкість у нашому програмному забезпеченні, і тому подібний тип сценаріїв може прокласти шлях до можливих атак, таких як CAPEC-108 :Command Line Execution through SQL Injection

Я сподіваюся, що ми зробили щось приємне, ми, розробники та інженер, робимо справи з обізнаністю, і ми будемо безпечнішими!


0

Для мене єдиним способом у SQL 2008 R2 був такий:

EXEC sp_configure 'Show Advanced Options', 1    
RECONFIGURE **WITH OVERRIDE**    
EXEC sp_configure 'xp_cmdshell', 1    
RECONFIGURE **WITH OVERRIDE**

-1

Можна зробити за допомогою SQLcmd. Ви виконали наступну команду. введіть тут опис зображення


2
Чи можете ви показати, чим ця відповідь відрізняється від інших прихильників цього питання. Крім того, будь ласка, використовуйте код коду для свого коду замість екрана екрана.
Афафуд

c: \> sqlcmd -S. -E 1) EXEC sp_con \
arnav
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.