'Xp_cmdshell' SQL Sunucusunu etkinleştir


177

İdam etmek istiyorum EXEC master..xp_cmdshell @bcpquery

Ama şu hatayı alıyorum:

SQL Server, 'xp_cmdshell' bileşeninin 'sys.xp_cmdshell' yordamına erişimi engelledi, çünkü bu bileşen bu sunucunun güvenlik yapılandırmasının bir parçası olarak kapatıldı. Sistem yöneticisi sp_configure kullanarak 'xp_cmdshell' kullanımını etkinleştirebilir. 'Xp_cmdshell'i etkinleştirme hakkında daha fazla bilgi için, SQL Server Books Online'da "Yüzey Alanı Yapılandırması" konusuna bakın.

Özelliği etkinleştirmeden önce bunu etkinleştirmenin veya bir şey yürütmenin herhangi bir yolu var mı?

Nasıl çözeceksin?

Yanıtlar:


370

Etkinleştirmeniz gerekiyor. Xp_cmdshell MSDN belgelerinin İzin bölümüne bakın :

http://msdn.microsoft.com/en-us/library/ms190693.aspx :

-- 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

2
Gerçekten, çok basit ve etkili çalışıyor!
indofraiser

2
SQL Management Studio'yu yönetici olarak yürüttüğünüzden emin olun
Haim Raman

Böyle büyük yardım için teşekkürler. Günlerce çözüm arıyoruz.
Mohan Rajput

2
güvenlik - Etkinleştirin, ancak dikkatli olun! unutmayın: bu
sawyer

39

Yeniden yapılandırdıktan sonra gelişmiş seçeneğini tekrar gizleyebilirsiniz:

-- show advanced options
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
-- enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
-- hide advanced options
EXEC sp_configure 'show advanced options', 0
GO
RECONFIGURE
GO

19

Sağ tıklama sunucusu -> Özellikler -> Yüzey Alanı Yapılandırması -> XPCmshellEnbled -> true resim açıklamasını buraya girin


9

Diğer cevaplar listelenen gibi, (SQL 2005 veya sonrası olarak) hile küresel yapılandırma ayarlarını değiştirmek için olduğunu show advanced optionsve xp_cmdshellhiç 1bu sırayla.

Buna ek olarak, önceki değerleri korumak istiyorsanız, sys.configurationsilk önce bunları okuyabilir , ardından sonunda ters sırada uygulayabilirsiniz. Gereksiz reconfigureçağrıları da önleyebiliriz :

declare @prevAdvancedOptions int
declare @prevXpCmdshell int

select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = 'show advanced options'
select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell'

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 1
    reconfigure
end

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 1
    reconfigure
end

/* do work */

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 0
    reconfigure
end

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 0
    reconfigure
end

Bunun SQL Server sürüm 2005 veya daha yeni bir sürüme dayandığını unutmayın (orijinal soru 2008 yılıydı).


4

Kabul edilen cevap çoğu zaman işe yarayacak olsa da, bazı durumlarda karşılaşmadım (hala nedenini bilmiyorum). Kullanarak sorgu hafif bir modifikasyon WITH OVERRIDEin RECONFIGUREçözüm sunar

Use Master
GO

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO

Beklenen çıktı

'Gelişmiş seçenekleri göster' yapılandırma seçeneği 0'dan 1'e değiştirildi. Yüklemek için RECONFIGURE deyimini çalıştırın.
'Xp_cmdshell' yapılandırma seçeneği 0'dan 1'e değiştirildi. Yüklemek için RECONFIGURE deyimini çalıştırın.


4

Bu soru çözülmüş olsa bile, bununla ilgili tavsiyemi eklemek istiyorum .... geliştirici olarak görmezden geldim.

Mesaj uyarısında belirtildiği gibi, etkin MSSQL xp_cmdshell'den bahsettiğimizi bilmek önemlidir :

Blockquote SQL Server, 'xp_cmdshell' bileşeninin 'sys.xp_cmdshell' yordamına erişimi engelledi, çünkü bu bileşen bu sunucunun güvenlik yapılandırmasının bir parçası olarak kapatıldı . [...]

Hizmeti etkin bırakmak, örneğin bir web uygulamasında bir saldırgandan SQL komutlarını yansıtabilen ve çalıştırabilen bir tür zayıflıktır . Popüler CWE-89 : SQL Injectionyazılımımızdaki zayıflık olabilir ve bu nedenle bu tür senaryolar CAPEC-108 gibi olası saldırılara yol açabilir. :Command Line Execution through SQL Injection

Umarım hoş bir şey yapmış oluruz, biz Geliştiriciler ve Mühendis bilinçli şeyler yaparız ve daha güvenli olacağız!


0

Benim için SQL 2008 R2'deki tek yol şuydu:

EXEC sp_configure 'Show Advanced Options', 1    
RECONFIGURE **WITH OVERRIDE**    
EXEC sp_configure 'xp_cmdshell', 1    
RECONFIGURE **WITH OVERRIDE**

-1

SQLcmd kullanarak yapabilirsiniz. aşağıdaki komutu çalıştırdınız. resim açıklamasını buraya girin


2
Bu cevabın bu sorunun diğer cevaplarından nasıl farklı olduğunu gösterebilir misiniz? Ayrıca, lütfen ekran görüntünüz yerine kodunuz için bir kod bloğu kullanın.
Athafoud

c: \> sqlcmd -S. -E 1) EXEC sp_con \
arnav
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.