Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché xp_cmdshell non funziona in SQL Server 2012?

Questo è stato disabilitato immediatamente a partire da SQL Server 2005, quando è stato introdotto il Strumento di configurazione dell'area di superficie , nel tentativo di rendere SQL Server più sicuro per impostazione predefinita. Da allora lo strumento è stato ritirato, ma puoi ancora controllare il comportamento utilizzando sp_configure . Un esempio è mostrato su 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

(Ho anche bloggato su questo molti anni fa .)

Il motivo è che questo è un potenziale buco di sicurezza. Se si consente a SQL Server di eseguire xp_cmdshell , quindi in teoria possono inviare qualsiasi comando del sistema operativo lì, aggirando tutta la sicurezza che pensavi di avere. Ciò è particolarmente problematico quando l'account del servizio SQL Server e/o l'account proxy sono stati elevati a sysadmin o altri livelli perché è più semplice che definire esplicitamente solo le cose esatte che dovrebbero essere in grado di fare.

Piuttosto che abilitarlo e disabilitarlo per supportare l'interazione della riga di comando, un modo popolare per esporre la funzionalità del sistema operativo pur mantenendo un certo controllo sulla sicurezza consiste nell'implementare la funzionalità a livello di sistema operativo necessaria utilizzando SQL-CLR. Ecco un buon punto di partenza per accedere al file system con CLR (tuttavia se cerchi in giro troverai approcci molto più moderni ed esaustivi).