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ć?
sql-server-2008
edgarmtze
źródło
źródło
Możesz także ponownie ukryć opcję zaawansowaną po ponownej konfiguracji:
źródło
Serwer kliknięcia prawym przyciskiem myszy -> Facets -> Surface Area Configuration -> XPCmshellEnbled -> true
źródło
Jak podano w innych odpowiedziach, sztuczka (w SQL 2005 lub nowszym) polega na zmianie globalnych ustawień konfiguracyjnych dla
show advanced options
ixp_cmdshell
na1
, w tej kolejności.Dodając do tego, jeśli chcesz zachować poprzednie wartości, możesz je
sys.configurations
najpierw przeczytać , a następnie zastosować w odwrotnej kolejności na końcu. Możemy również uniknąć niepotrzebnychreconfigure
telefonów:Zauważ, że zależy to od SQL Server w wersji 2005 lub nowszej (oryginalne pytanie dotyczyło 2008).
źródło
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 OVERRIDE
inRECONFIGURE
daje rozwiązanieOczekiwany wynik to
źródło
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:
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 Injection
moż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!
źródło
Dla mnie jedyną możliwością w SQL 2008 R2 było:
źródło
Możesz to zrobić za pomocą SQLcmd. uruchomiłeś następujące polecenie.
źródło