Włącz serwer SQL „xp_cmdshell”


177

Chcę wykonać EXEC master..xp_cmdshell @bcpquery

Ale pojawia się następujący błąd:

SQL Server zablokował dostęp do procedury „sys.xp_cmdshell” składnika „xp_cmdshell”, ponieważ ten składnik jest wyłączony w ramach konfiguracji zabezpieczeń dla tego serwera. Administrator systemu może włączyć używanie „xp_cmdshell” za pomocą sp_configure. Aby uzyskać więcej informacji na temat włączania „xp_cmdshell”, zobacz „Surface Area Configuration” w SQL Server Books Online.

Czy istnieje sposób, aby to aktywować lub wykonać coś przed włączeniem tej funkcji?

Jak to rozwiązać?

Odpowiedzi:


370

Musisz to włączyć. Zapoznaj się z sekcją uprawnień w dokumentacji 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
Działa naprawdę, bardzo prosto i skutecznie!
indofraiser

2
Upewnij się, że wykonujesz SQL Management Studio jako administrator
Haim Raman,

Dziękuję za tak wielką pomoc. Szukam rozwiązania na kilka dni.
Mohan Rajput,

2
bezpieczeństwo - Włącz, ale bądź ostrożny! pamiętaj: to
sawyer

39

Możesz także ponownie ukryć opcję zaawansowaną po ponownej konfiguracji:

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

Serwer kliknięcia prawym przyciskiem myszy -> Facets -> Surface Area Configuration -> XPCmshellEnbled -> true wprowadź opis obrazu tutaj


9

Jak podano w innych odpowiedziach, sztuczka (w SQL 2005 lub nowszym) polega na zmianie globalnych ustawień konfiguracyjnych dla show advanced optionsi xp_cmdshellna 1, w tej kolejności.

Dodając do tego, jeśli chcesz zachować poprzednie wartości, możesz je sys.configurationsnajpierw przeczytać , a następnie zastosować w odwrotnej kolejności na końcu. Możemy również uniknąć niepotrzebnych reconfiguretelefonów:

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

Zauważ, że zależy to od SQL Server w wersji 2005 lub nowszej (oryginalne pytanie dotyczyło 2008).


4

Chociaż zaakceptowana odpowiedź będzie działać w większości przypadków, napotkałem (nadal nie wiem dlaczego) niektóre przypadki, które tak nie są. Niewielka modyfikacja zapytania przy użyciu WITH OVERRIDEin RECONFIGUREdaje rozwiązanie

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

Oczekiwany wynik to

Opcja konfiguracji „pokaż opcje zaawansowane” została zmieniona z 0 na 1. Aby zainstalować, uruchom instrukcję RECONFIGURE.
Opcja konfiguracji „xp_cmdshell” została zmieniona z 0 na 1. Uruchom instrukcję RECONFIGURE, aby zainstalować.


4

Nawet jeśli to pytanie zostało rozwiązane, chcę dodać moją radę na ten temat ... ponieważ jako programista zignorowałem.

Ważne jest, aby wiedzieć, że mówimy o włączonym MSSQL xp_cmdshell ma krytyczne znaczenie dla bezpieczeństwa, jak wskazano w ostrzeżeniu wiadomości:

Blockquote SQL Server zablokował dostęp do procedury „sys.xp_cmdshell” składnika „xp_cmdshell”, ponieważ ten składnik jest wyłączony w ramach konfiguracji zabezpieczeń dla tego serwera. […]

Pozostawienie włączonej usługi jest rodzajem słabości , która na przykład w aplikacji internetowej może odzwierciedlać i wykonywać polecenia SQL od atakującego. Popularny CWE-89 : SQL Injectionmoże to być słabość naszego oprogramowania, dlatego tego typu scenariusze mogą utorować drogę do możliwych ataków, takich jak CAPEC-108 :Command Line Execution through SQL Injection

Mam nadzieję, że zrobiłem coś przyjemnego, jako programiści i inżynierowie robimy rzeczy ze świadomością i będziemy bezpieczniejsi!


0

Dla mnie jedyną możliwością w SQL 2008 R2 było:

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

-1

Możesz to zrobić za pomocą SQLcmd. uruchomiłeś następujące polecenie. wprowadź opis obrazu tutaj


2
Czy możesz pokazać, czym różni się ta odpowiedź od innych odpowiedzi na to pytanie. Ponadto użyj bloku kodu zamiast zrzutu ekranu.
Athafoud

c: \> sqlcmd -S. -E 1) EXEC sp_con \
arnav
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.