Ini telah dinonaktifkan sejak awal dengan SQL Server 2005, ketika mereka memperkenalkan Alat Konfigurasi Area Permukaan
, dalam upaya membuat SQL Server lebih aman secara default. Alat tersebut telah dihentikan, tetapi Anda masih dapat mengontrol perilaku menggunakan sp_configure
. Contoh ditampilkan di 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
(Saya juga membuat blog tentang ini bertahun-tahun yang lalu .)
Pasalnya, ini merupakan celah keamanan yang potensial. Jika Anda mengizinkan SQL Server untuk menjalankan xp_cmdshell
, maka mereka secara teoritis dapat mengirim apa saja perintah sistem operasi di sana, melewati setiap dan semua keamanan yang Anda pikir Anda miliki. Ini terutama bermasalah ketika akun layanan SQL Server dan/atau akun proxy telah ditingkatkan ke sysadmin atau level lain karena itu lebih mudah daripada secara eksplisit mendefinisikan hanya hal-hal persis yang seharusnya dapat mereka lakukan.
Daripada mengaktifkan dan menonaktifkannya untuk mendukung interaksi baris perintah, cara populer untuk mengekspos fungsionalitas sistem operasi sambil tetap memiliki kontrol atas keamanan adalah dengan mengimplementasikan fungsionalitas tingkat OS yang Anda perlukan menggunakan SQL-CLR. Ini titik awal yang baik untuk mengakses sistem file dengan CLR (namun jika Anda mencari di sekitar Anda akan menemukan pendekatan yang jauh lebih modern dan lengkap).