Počínaje verzí SQL Server 2005, kdy byla uvedena Nástroj pro konfiguraci oblasti povrchu
, ve snaze učinit SQL Server ve výchozím nastavení bezpečnější. Tento nástroj byl od té doby vyřazen, ale stále můžete ovládat chování pomocí sp_configure
. Příklad je uveden na webu MSDN
:
-- 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
(Před mnoha lety jsem o tom také blogoval .)
Důvodem je, že se jedná o potenciální bezpečnostní díru. Pokud povolíte SQL Serveru spouštět xp_cmdshell
, pak mohou teoreticky poslat jakékoli příkaz operačního systému, který obchází veškeré zabezpečení, o kterém jste si mysleli, že ho máte. To je obzvláště problematické, když byl účet služby SQL Server a/nebo účet proxy povýšen na sysadmin nebo jinou úroveň, protože je to jednodušší, než explicitně definovat pouze přesné věci, které by měli umět.
Spíše než ji povolit a zakázat pro podporu interakce s příkazovým řádkem, oblíbeným způsobem, jak odhalit funkčnost operačního systému a zároveň mít určitou kontrolu nad zabezpečením, je implementace funkcí na úrovni operačního systému, kterou potřebujete, pomocí SQL-CLR. Zde je dobrý výchozí bod pro přístup k souborový systém s CLR (když však budete hledat kolem sebe, najdete mnohem modernější a vyčerpávající přístupy).