2011-04-01 9 views
8

से एसक्यूएल सर्वर सीएलआर फ़ाइल सिस्टम का उपयोग मैंने एक साधारण यूडीएफ लिखा है जिसमें ग्राफ़िक प्लॉट करना चाहिए और डिस्क पर इसे सहेजना चाहिए। असल में, मैं एसक्यूएल सर्वर और आर के बीच प्रॉक्सी के रूप में एक यूडीएफ का उपयोग कर रहा हूं, इसलिए यूडीएफ केवल डीसीओएम के माध्यम से एसक्यूएल सर्वर से आर इंजन को आर स्क्रिप्ट पास करता है। जब तक मैं ग्राफ़िक प्लॉट करने या डिस्क पर सहेजने की कोशिश नहीं करता तब तक सब कुछ ठीक काम करता है। मैंने यूएनएसएएफई अनुमतियों के साथ असेंबली बनाई।यूडीएफ

इसलिए, यह इस प्रकार है: एसक्यूएल इंजन -> यूडीएफ -> (डी) COM सर्वर -> आर -> (डी) COM सर्वर -> यूडीएफ -> एसक्यूएल इंजन।

तो, मेरी पहली समस्या यह है कि, क्या मैं यूडीएफ से जीयूआई बना सकता हूं? मुझे नहीं लगता, लेकिन यह पूछने लायक है।

दूसरी समस्या यह है कि यूएनएसएफ़ईई अनुमति के साथ एक असेंबली फाइल सिस्टम तक क्यों नहीं पहुंच सकती है। मुझे कोई त्रुटि नहीं मिल रही है, बस कुछ भी नहीं होता है।

आर पर्यावरण अलग-अलग पता स्थान पर है इसलिए मुझे कोई कारण नहीं दिख रहा है कि सीएलआर के लिए एसक्यूएल इंजन से अनुमतियां क्यों प्रभावित होंगी।

धन्यवाद

संपादित करें:

मैं प्रक्रियाओं के साथ एक ही बात करने की कोशिश की। अब एक खाली फाइल बनाई गई है। यह मेरा आर परीक्षण कोड है:

jpeg("C:\\test1.jpg"); x <- rnorm(100); hist(x); dev.off() 

कोई विचार क्या हो रहा है?

+0

मैं SysInternals Filemon या Process मॉनीटर चलाऊंगा और फ़ाइल सिस्टम में असेंबली क्या करने का प्रयास कर रहा हूं यह निर्धारित करने और निर्धारित करने के लिए। आप उन उपकरणों में से किसी एक का उपयोग करके कुछ दृश्यता प्राप्त कर सकते हैं। –

उत्तर

2
  1. आप सर्वर-साइड कोड
  2. असुरक्षित से एक जीयूआई का दृष्टांत नहीं कर सकते हैं खतरनाक है, EXTERNAL_ACCESS बेहतर होगा के रूप में यह अभी भी फाइल सिस्टम का उपयोग कर सकते
  3. अगर कोई त्रुटि है की अनुमति देता है, वहाँ है कि अपने कोड का अच्छा मौका है सही ढंग से चल रहा है लेकिन यह आप जो कुछ करने की उम्मीद करते हैं उससे कुछ अलग कर रहा है; क्या आप कुछ डीबगिंग कोड जोड़ सकते हैं या डीबगर संलग्न कर सकते हैं?
  4. एक प्रक्रिया है क्योंकि they are much more flexible

लेकिन यह स्पष्ट नहीं है क्यों आप चीजों को इस तरह से कर रहे हैं एक यूडीएफ की तुलना में यहां अधिक उपयुक्त है। डेटाबेस से डेटा प्राप्त करने, अपने आर प्रोग्राम को कॉल करने और छवि को सहेजने के लिए SQL सर्वर के बाहर एक छोटा (?) प्रोग्राम लिखना शायद अधिक आसान होगा। SQL सर्वर में सर्वर-साइड कोड डेटा प्रोसेसिंग के लिए बहुत अच्छा है, लेकिन सामान्य रूप से फाइल सिस्टम और बाहरी संसाधनों के साथ बातचीत करने के लिए बहुत अजीब है, भले ही आप CLR कोड का उपयोग करते हों।

क्या कोई विशिष्ट कारण है कि आपको SQL सर्वर से ऐसा करने की आवश्यकता क्यों है?

+0

कारण यह है कि मैं एक बड़ी परियोजना के लिए एक छोटा डेमो बना रहा हूं। आइडिया एसएसएमएस विंडो से सबकुछ करना है। मुझे पता है कि यह एक अजीब दृष्टिकोण है लेकिन मेरे पास कोई अन्य विकल्प नहीं है। इसके अलावा, मुझे यूएनएसएएफई अनुमति की आवश्यकता है क्योंकि कुछ अप्रबंधित डीएल लोड हो गए हैं। दोबारा, यह सिर्फ एक डेमो है, इसलिए मुझे सुरक्षा के बारे में चिंता नहीं है। मैंने डीएल के साथ विजुअल स्टूडियो से तत्काल डीबगर का इस्तेमाल किया और सब ठीक काम किया, इसलिए मुझे नहीं लगता कि समस्या डीएलएल कोड में है। मैं अपनी किस्मत कल प्रक्रियाओं के साथ कोशिश करूंगा, लेकिन शायद यह एक लंबा शॉट है। उत्तर देने के लिए आपका धन्यवाद। – Klark

+0

मैंने अपना प्रश्न अपडेट किया। कृपया इसे देखें – Klark

+1

@ क्लर्क क्यों आपके पास अपना डेमो चलाने के बारे में "कोई अन्य विकल्प नहीं है"?आपके प्रोग्राम का आउटपुट ग्राफिक्स युक्त फाइल प्रतीत होता है, इसलिए एसएसएमएस बस गलत टूल है। बाहरी प्रोग्राम क्यों न लिखें और इसे अपने डेमो के लिए बैच फ़ाइल से लॉन्च करें (यदि आपके पास जीयूआई बनाने का समय नहीं है)? मुझे अनुपयोगी होने के लिए खेद है, लेकिन आप किसी स्पष्ट कारण के लिए चीजों को बेहद अजीब तरीके से कर रहे हैं। – Pondlife

1

फाइल सिस्टम तक पहुंचने के लिए एसएसआईएस का उपयोग करना बेहतर है। आप किसी भी समय पैकेज को संपादित और परीक्षण कर सकते हैं, जब आपको आवश्यकता हो तो लॉगिंग करें। इसके अलावा आप इस पैकेज में विजुअलस्टूडियो में आसानी से जीयूआई जोड़ सकते हैं। डेटाबेसइंजिन से फाइल सिस्टम एक्सेस करें संभावित सुरक्षा मुद्दों के कारण सबसे अच्छा अभ्यास नहीं है।

0

मेरी पहली समस्या यह है कि, क्या मैं यूडीएफ से जीयूआई बना सकता हूं?

आप System.Drawing का उपयोग बनाने के लिए और/या छवियों में हेरफेर, लेकिन कर सकते हैं:

  • ही अगर विधानसभा UNSAFE के PERMISSION_SET, और
  • आप एसक्यूएल सर्वर में System.Drawing विधानसभा लोड है, के रूप में UNSAFE

दूसरा समस्या यह है, क्यों UNS के साथ एक विधानसभा एएफई अनुमति फाइल सिस्टम तक नहीं पहुंच सकती है। मुझे कोई त्रुटि नहीं मिल रही है, बस कुछ भी नहीं होता है।

एक विधानसभा या तो EXTERNAL_ACCESS या UNSAFE के रूप में बाहरी संसाधनों का उपयोग करने की अनुमति दी है चिह्नित। ऐसा करने का प्रयास करने और त्रुटि प्राप्त करने से यह पता चलता है कि इसकी अनुमति है। हालांकि, यह स्पष्ट नहीं है कि "कुछ नहीं होता" का अर्थ है क्योंकि आपके पास catch ब्लॉक है जो त्रुटि को "निगल रहा है" या फ़ाइल उस निर्देशिका में बनाई गई थी जिसे आप उम्मीद नहीं कर रहे थे क्योंकि आपने पूर्ण के बजाय एक सापेक्ष पथ का उपयोग किया था पथ।

दो मुद्दों (हालांकि वे एक साथ बंधे रहे हैं) बाहरी संसाधन का उपयोग के साथ कर रहे हैं:

  • कौन सा विंडोज़/सक्रिय निर्देशिका लॉगिन कि पहुँच के लिए इस्तेमाल किया जा रहा है। डिफ़ॉल्ट रूप से, SQLCLR (जैसे xp_cmdshell) MSSQLSERVER प्रक्रिया के लिए "लॉग ऑन एज़" खाते के सुरक्षा संदर्भ के तहत सिस्टम तक पहुंच जाएगा। या, आपके पास प्रतिरूपण को सक्षम करने की क्षमता है जो SQLCLR कोड को निष्पादित करने वाले किसी भी व्यक्ति के सुरक्षा संदर्भ को मान लेगा, यह मानते हुए कि लॉग इन (SQL सर्वर में) Windows/Active Directory खाते से जुड़ा हुआ है। SQL सर्वर लॉग इन प्रतिरूपण का उपयोग नहीं कर सकते हैं।

  • किस खाते पर बाहरी संसाधन तक पहुंच है, उस संसाधन के लिए उनकी अनुमतियां क्या हैं? अगर यह फाइल सिस्टम है, तो क्या उस खाते में निर्दिष्ट पथ तक पहुंच है?

दी आर उदाहरण के संदर्भ में (यानी C:\test1.jpg बनाने), और यह सोचते हैं कि प्रतिरूपण के लिए इस्तेमाल नहीं किया जा रहा है: करता है जो खाता MSSQLSERVER (या MSSQL $ {InstanceName}) सेवा के रूप में चलाने के लिए सी पर लिखने की अनुमति है: \? ध्यान रखें कि सी: सर्वर का ड्राइव जहां SQL सर्वर चल रहा है, न कि आपके स्थानीय कंप्यूटर, जब तक कि SQL सर्वर का यह उदाहरण आपके कंप्यूटर पर चल रहा न हो।

संबंधित मुद्दे