XP_CMDSHELL

Funkcja ta pozwala na wykonywanie poleceń systemowych „windowsowych” w zapytaniach SQL
Przykładowo aby wyświetlić zawartość folderu C:\TEMP

xp_cmdshell 'dir c:\'

Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1 [Batch Start Line 0]
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.

Włączamy opcję XP_CMDSHELL


EXEC sp_configure 'show advanced options', '1'
RECONFIGURE
-- this enables xp_cmdshell
EXEC sp_configure 'xp_cmdshell', '1'
RECONFIGURE

Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.
Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.

Ponownie wykonujemy polecenie:

xp_cmdshell 'dir c:\TEMP'

output
--------------------------------------------------------------------------------------------------
 Volume in drive C is SYSTEM
 Volume Serial Number is 6278-72B2
NULL
 Directory of c:\TEMP
NULL
08.12.2021  21:29              .
08.12.2021  21:29              ..
22.11.2020  15:14         3 391 488 CSHARP.bak
07.12.2020  17:01         3 194 880 Database1.bak
25.11.2020  20:39         5 775 360 TSQL2012.bak
               3 File(s)     12 361 728 bytes
               2 Dir(s)  16 180 371 456 bytes free
NULL

(13 rows affected)

Właczenie funkcji XP_CMDSHELL z punktu widzenie bezpieczeństwa nie jest bezpieczne (dlatego domyślnie jest wyłączone więc po wykonaniu naszych zapytań dobrze jest go wyłączyć

EXEC sp_configure 'show advanced options', '1'
RECONFIGURE
-- this disables xp_cmdshell
EXEC sp_configure 'xp_cmdshell', '0'
RECONFIGURE

XP_CMDSHELL'a możemy również wyłączyć z graficznego interfejsu Management Studio.



Wybieramy z listy rozwijanej "Server Security"

Zmieniamy TRUE na FALSE

Może się też zdarzyć, że mimo włączonej opcji XP_CMDSHELL nie możemy wykonać poleceń z powodu braku uprawnień

Msg 229, Level 14, State 5, Procedure xp_cmdshell, Line 1 [Batch Start Line 0]
The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.

Należy wtedy dodać uprawnienia dla konkretnego użytkownika

USE master
GO
CREATE USER [user_test] FOR LOGIN [user_test]
GO
GRANT EXEC ON xp_cmdshell TO [user_test]
GO

Ten wpis został opublikowany w kategorii Microsoft SQL. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz