'Xp_cmdshell' SQL सर्वर सक्षम करें


177

मैं अमल करना चाहता हूं EXEC master..xp_cmdshell @bcpquery

लेकिन मुझे निम्नलिखित त्रुटि मिल रही है:

SQL सर्वर ने घटक 'xp_cmdshell' के 'sys.xp_cmdshell' प्रक्रिया तक पहुंच को अवरुद्ध कर दिया क्योंकि यह घटक इस सर्वर के लिए सुरक्षा कॉन्फ़िगरेशन के भाग के रूप में बंद है। एक सिस्टम व्यवस्थापक sp_configure का उपयोग करके 'xp_cmdshell' के उपयोग को सक्षम कर सकता है। 'Xp_cmdshell' को सक्षम करने के बारे में अधिक जानकारी के लिए, SQL Server पुस्तकें ऑनलाइन में "भूतल क्षेत्र कॉन्फ़िगरेशन" देखें।

क्या इसको सक्रिय करने, या सुविधा को सक्षम करने से पहले कुछ निष्पादित करने का कोई तरीका है?

इसे कैसे हल करें?

जवाबों:


370

आपको इसे सक्षम करने की आवश्यकता है। Xp_cmdshell MSDN डॉक्स की अनुमति अनुभाग देखें :

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
वास्तव में अच्छी तरह से सरल और प्रभावी काम करता है!
इंडोफ्राइज़र

2
सुनिश्चित करें कि आप SQL प्रबंधन स्टूडियो को व्यवस्थापक के रूप में निष्पादित करते हैं
Haim Raman

इतनी बड़ी मदद के लिए धन्यवाद। दिनों के समाधान की तलाश में।
मोहन राजपूत

2
सुरक्षा - सक्षम करें लेकिन लापरवाह रहें! : ध्यान में रखना इस
Sawyer

39

आप पुन: कॉन्फ़िगर करने के बाद फिर से उन्नत विकल्प भी छिपा सकते हैं:

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

राइट क्लिक सर्वर -> पहलू -> भूतल क्षेत्र विन्यास -> XPCmshellEnbled -> सच यहां छवि विवरण दर्ज करें


9

अन्य उत्तर में सूचीबद्ध के रूप में, चाल (SQL 2005 या बाद में) के लिए वैश्विक विन्यास सेटिंग्स बदलने के लिए है show advanced optionsऔर xp_cmdshellकरने के लिए 1, इसी क्रम में।

इसे जोड़ना, यदि आप पिछले मूल्यों को संरक्षित करना चाहते हैं, तो आप उन्हें sys.configurationsपहले से पढ़ सकते हैं , फिर उन्हें अंत में रिवर्स ऑर्डर में लागू कर सकते हैं । हम अनावश्यक reconfigureकॉल से भी बच सकते हैं:

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

ध्यान दें कि यह SQL Server 2005 या बाद के संस्करण पर निर्भर करता है (मूल प्रश्न 2008 के लिए था)।


4

जबकि स्वीकृत उत्तर अधिकांश समय काम करेगा, मैंने कुछ मामलों का सामना किया है (फिर भी पता नहीं क्यों)। का उपयोग करके क्वेरी की एक मामूली संशोधन WITH OVERRIDEमें RECONFIGUREसमाधान देता है

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

अपेक्षित आउटपुट है

कॉन्फ़िगरेशन विकल्प 'शो उन्नत विकल्प' 0 से 1 में बदल गया। इंस्टॉल करने के लिए RECONFIGURE स्टेटमेंट चलाएँ।
कॉन्फ़िगरेशन विकल्प 'xp_cmdshell' 0 से 1 में बदल गया है। इंस्टॉल करने के लिए RECONFIGURE स्टेटमेंट चलाएँ।


4

यहां तक ​​कि अगर यह प्रश्न हल हो गया है, तो मैं उस बारे में अपनी सलाह जोड़ना चाहता हूं .... क्योंकि डेवलपर के रूप में मैंने नजरअंदाज कर दिया था।

यह जानना महत्वपूर्ण है कि हम MSSQL xp_cmdshell सक्षम के बारे में बात कर रहे हैं , सुरक्षा के लिए महत्वपूर्ण है, जैसा कि संदेश चेतावनी में संकेत दिया गया है:

ब्लॉकक्वाइट SQL सर्वर ने घटक 'xp_cmdshell' के 'sys.xp_cmdshell' प्रक्रिया तक पहुंच को अवरुद्ध कर दिया क्योंकि यह घटक इस सर्वर के लिए सुरक्षा कॉन्फ़िगरेशन के भाग के रूप में बंद है। [...]

सक्षम सेवा को छोड़ना एक प्रकार की कमजोरी है , उदाहरण के लिए वेब-ऐप में हमलावर से कमांड SQL को प्रतिबिंबित और निष्पादित कर सकता है। लोकप्रिय CWE-89 : SQL Injectionयह हमारे सॉफ़्टवेयर में कमजोरी हो सकती है, और इसलिए इस प्रकार के परिदृश्य संभव हमलों का मार्ग प्रशस्त कर सकते हैं, जैसे कि CAPEC-108 :Command Line Execution through SQL Injection

मुझे आशा है कि कुछ सुखद हुआ होगा, हम डेवलपर्स और इंजीनियर जागरूकता के साथ काम करते हैं और हम सुरक्षित रहेंगे!


0

मेरे लिए, SQL 2008 R2 का एकमात्र तरीका यह था:

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

-1

आप SQLcmd का उपयोग कर सकते हैं। आपने निम्न आदेश चलाए हैं। यहां छवि विवरण दर्ज करें


2
क्या आप दिखा सकते हैं कि यह उत्तर इस प्रश्न के अन्य आरक्षकों की तुलना में कैसे भिन्न है। इसके अलावा, कृपया स्क्रीनशॉट के बजाय अपने कोड के लिए एक कोड ब्लॉक का उपयोग करें।
अथफौड

c: \> sqlcmd -S। -E 1) EXEC sp_con \
arnav
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.