2009-07-07 13 views
15

के रूप में xp_cmdshell कमांड निष्पादित करें I नेटवर्क ड्राइव को माउंट करने के लिए xp_cmdshell (TSQL प्रक्रिया) चलाने के लिए और फिर mdb फ़ाइलों को रिमोट करने के लिए चलाएं।विशिष्ट उपयोगकर्ता

मैं एमएस एसक्यूएल सर्वर पर व्यवस्थापक हूं और मैंने xp_cmdshell निष्पादन के अनुसार निष्पादन की अनुमति दी है।

  • जब मैं xp_cmdshell फोन उपयोगकर्ता कमांड को क्रियान्वित एसक्यूएल sysadmin, यानी वह खाता जो SQL सर्वर प्रक्रिया को चलाने है:

    हालांकि, अभी भी एक समस्या है।

  • मैं xp_cmdshell खाता, जिसके साथ मैं एसक्यूएल सर्वर से कनेक्ट हूं रूप में कार्यान्वित चाहते हैं, यानी प्रशासक

शोध करे की

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

क्योंकि इस संघर्ष की, मैं एक नेटवर्क ड्राइव, क्योंकि यह प्रशासक
के लिए sysadmin और नहीं के लिए रखा जाता है का उपयोग नहीं कर रहा उपयोग करने के लिए sp_ xp_ cmdshell_ proxy_ खाता खाता, जिसके साथ मैं चाहता हूँ निर्दिष्ट करने के लिए करने की कोशिश की xp_cmdshell चलाने के लिए, लेकिन SysAdmin अभी भी उपयोग किया गया खाता है।

इसलिए, इस कोड:
select user_name(), suser_name;
exec xp_cmdshell 'echo %username%';

प्रदर्शित करता है:
Administrator Administrator
SysAdmin

किसी को भी जानता है करता है कितनी अच्छी तरह प्रतिरूपित करने के लिए आदेश xp_cmdshell? क्या कुछ (पुनः) कॉन्फ़िगर करने के लिए कुछ है?

आपकी मदद के लिए धन्यवाद।

+0

प्रॉक्सी खाते में केवल प्रयोग किया जाता है जब नॉन- sysadmin उपयोगकर्ता xp_cmdshell निष्पादित –

+0

तो कैसे मैं एक विशिष्ट सिस्टम प्रशासक उपयोगकर्ता मजबूर कर सकते हैं? – Antwan

+0

बस स्पष्ट करने के लिए - आपने उस खाते को सेट करने के लिए sp_xp_cmd_shell_proxy_account का उपयोग किया है जिसका उपयोग आप करना चाहते हैं, और फिर xp_cmdshell का उपयोग करके कमांड निष्पादित किया है, और उपयोग किया गया खाता अभी भी सेवा खाता है? मैं बस यह सुनिश्चित करना चाहता हूं कि मैं आपके कदमों को समझूं। – SqlRyan

उत्तर

1

शायद आप PsExec को आजमा सकते हैं? इस यूआरएल पर फ़ाइल डाउनलोड करें और इसे% Path% पर्यावरण परिवर्तक के फ़ोल्डर सदस्य में कॉपी करें।

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

exec xp_cmdshell 'psexec -u Administrator -p password net use ...' 
+1

यह एक समाधान हो सकता है, लेकिन इसका मतलब है सादे पाठ में पासवर्ड लिखना, जो मुश्किल है। मैं एक शुद्ध टीएसक्यूएल रास्ता तलाश रहा हूं ... – Antwan

+0

आपके अपडेट के लिए हाय धन्यवाद, लेकिन जब मैंने नीचे दिए गए कमांड के साथ कोशिश की "exec xp_cmdshell 'सी: \ Adhoc \ PSTools \ psexec -u डोमेन \ id -p पासवर्ड dir \\ sharelocation'" यह बिना किसी परिणाम के हमेशा के लिए चल रहा है, कृपया सुझाव दें –

0

आप एक उपयोगकर्ता नाम और पासवर्ड xp_cmdshell के अंदर के साथ "शुद्ध उपयोग" की कोशिश कर सकते। यह यूएनसी के कनेक्शन के लिए प्रमाण-पत्र स्थापित करता है।

हालांकि, मुझे यकीन नहीं है कि यह कब तक जारी रहेगा। यदि यह अनिश्चित काल तक रहता है (उदाहरण के लिए सर्वर पुनरारंभ होने तक), तो आपके पास स्टार्ट-अप संग्रहीत प्रक्रिया हो सकती है जो "शुद्ध उपयोग" करती है और यह सुनिश्चित करती है कि यह बाद में उपयोग के लिए उपलब्ध हो।

बाद में xp_cmdshell (एमडीबी फाइलों तक पहुंचने के लिए) प्रमाणीकरण की आवश्यकता नहीं होगी क्योंकि क्रेडेंशियल ओएस के भीतर पहले ही स्थापित हो चुके हैं।

+0

मुझे इसे स्वीकार करने में लगभग शर्म आती है, लेकिन यह काम करता है। यह एक सुरक्षा बिंदु से भयानक है, लेकिन मैंने इसे निराशा से बाहर कर दिया है। लेकिन - क्या आप सीधे नेटवर्क डिस्क से एमडीबी फाइलें खोल रहे हैं? वह मुझे रातें रखेगा। मैं जो कर रहा था वह किसी भी डोमेन के साथ घर में उगाए गए लॉग शिपिंग था (यानी फाइल कॉपी ऑपरेशंस) – onupdatecascade

7

क्योंकि आप sysadmin समूह में लॉगिन के रूप में SQL से कनेक्ट कर रहे हैं, xp_cmdshell सेवा खाते के रूप में चलता है।

यदि आप कम-विशेषाधिकार लॉगिन के रूप में कनेक्ट होते हैं, तो यह इसके बजाय xp_cmdshell_proxy_account का उपयोग करेगा। तो यह देखने के लिए कि क्या इससे मदद मिलती है, EXECUTE AS LOGIN='lowprivaccount' पहले करने का प्रयास करें।

बेशक, आप जो वास्तव में पूछ रहे हैं वह अपेक्षित उपयोग नहीं है। अपेक्षित उपयोग यह है कि उच्च-विशेषाधिकार खाते सेवा खाते का उपयोग करने के लिए xp_cmdshell की अनुमति दे सकते हैं, जबकि अन्य सभी को निचले विशेषाधिकार प्रॉक्सी खाते को रखना होगा।

+0

तो ... क्या आपको वास्तव में sysadmin सर्वर भूमिका में सुरक्षा संदर्भ का उपयोग करके इसे चलाने की आवश्यकता है? आदर्श रूप से आपको sysadmin चीजों को करने की आवश्यकता होने पर केवल sysadmin भूमिका का उपयोग करना चाहिए। –

3

मैं वास्तव में नेटवर्क शेयरों पर इसी तरह की बातों के लिए अतीत में इस विधि का उपयोग करने के लिए, इस कोशिश पड़ा है ...

- अपने ड्राइव नक्शा और यह लगातार बनाने।

xp_cmdshell "शुद्ध उपयोग टी: \\ < सर्वर > \ < शेयर > < पासवर्ड >/उपयोगकर्ता: < उपयोगकर्ता नाम >/लगातार: हाँ"

- T-SQL कोड टी ड्राइव

का बना उपयोग

- हटाना ड्राइव मानचित्रण xp_cmdshell "शुद्ध उपयोग टी:/हटाएँ"

आप वास्तव में एक नौकरी कि जब एसक्यूएल निष्पादित करता है सेट कर सकते हैं सेवा शुरू होती है और इसे इस ड्राइव को मैप कर देती है ताकि जब तक एसक्यूएल चल रहा हो तब तक आपके पास हमेशा तक पहुंच होगी। आपको बस इतना करना होगा कि ड्राइव को मानचित्रित करें और ड्राइव के प्रारंभिक मानचित्रण को करें और sp_procoption (http://msdn.microsoft.com/en-us/library/ms181720.aspx)

+1

मुझे उत्सुकता है कि आप यूएनसी पथ को संदर्भित करने के बजाए ड्राइव को मानचित्र क्यों करेंगे? – Pondlife

+0

@ पांडा लाइफ कभी-कभी, जब आप यूएनसी (आपके डोमेन पर नहीं) से कनेक्ट करने के लिए वैकल्पिक प्रमाण-पत्रों का उपयोग कर रहे हैं, तो यह मदद करता है। –

-2

आपको एक संग्रहित प्रक्रिया बनाना होगा जिसमें आप अपनी xp_cmdshell स्क्रिप्ट रखेंगे इस में।

एक संग्रहीत प्रक्रिया व्यवस्थापक खाते का उपयोग कर चलाता है, इसलिए अपने xp_cmdshell सफलतापूर्वक चला जब आप पुनः आरंभ सर्वर के बाद संग्रहीत प्रक्रिया

create procedure RunShellIndirectly 

as 

declare @tawandachinaka as varchar(50) 

set @tawandachinaka='DIR "c:\scrap measurement\"*.csv /B' 

EXEC xp_cmdshell @tawandachinaka 
+3

"एक संग्रहित प्रक्रिया व्यवस्थापक खाते का उपयोग कर चलती है": यह [सही नहीं है] (http://msdn.microsoft.com/en-us/library/ms188354 (v = sql.100) .aspx)। – Pondlife

+0

वर्तमान में असाइन किए गए SQL सेवा खाते का उपयोग करके संग्रहीत प्रक्रिया चलती है (जहां तक ​​ओएस का संबंध है) और एसपी केवल तभी चलाया जा सकता है जब SQL अनुमतियां (सुरक्षा में सेट हों) इसे अनुमति दें। –

-1

अमल पर अमल करना चाहिए आदेश तो कृपया समाधान आदेश की बचत होगी ...

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 

exec xp_cmdshell 'net use \ip\xxx pass /user:xxx /persistent:no' 

Use Master GO 

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

EXEC master.dbo.sp_configure 'xp_cmdshell', 0 RECONFIGURE WITH OVERRIDE 
संबंधित मुद्दे