SQL सर्वर CLR में 3 पार्टी dll


14

मुझे SQL Server CLR में एक ट्रिगर c # कोड में एक तीसरी पार्टी DLL का उपयोग करने की आवश्यकता है

लेकिन जब मैं संदर्भ जोड़ने की कोशिश करता हूं तो यह SQL सर्वर से कुछ DLL दिखाता है।

मैं अपने तीसरे पक्ष को dll SQL सर्वर से कैसे जोड़ सकता हूं ?


2
उसी तरह से आप किसी भी SQL CLR असेंबलियों को जोड़ते हैं ?

जवाबों:


14

आप केवल उन असेंबली का संदर्भ जोड़ सकते हैं जो Sql सर्वर के साथ पंजीकृत हैं। यदि वे पंजीकृत नहीं हैं, तो वे ऐड रेफरेंस संवाद में दिखाई नहीं देंगे।

आपको DLL को पंजीकृत करने के लिए कई चरणों की आवश्यकता होगी, सबसे पहले आपको अपने डेटाबेस को फिर से कॉन्फ़िगर करना होगा:

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;

एक बार यह पूरा हो जाने के बाद, Sql Server CLR सक्षम है। इसके बाद, आपको अपनी विधानसभा को पंजीकृत करना होगा:

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE

यदि यह अंतिम स्क्रिप्ट सही तरीके से चलती है, तो असेंबली अब पंजीकृत है, और ऐड रेफरेंस संवाद में दिखाई देगी।

हालाँकि आपको इस पर विचार करने की आवश्यकता होगी कि क्या आपके Sql सर्वर CLR विन्यास की अनुप्रयोग सुरक्षा है:

  1. एक असेंबली के रूप में पंजीकरण करना पसंद करते हैं SAFE, केवल असाधारण परिस्थितियों में आपको उपयोग करना चाहिए EXTERNAL_ACCESSया UNSAFE
  2. पूर्ण विश्वास सीएलआर (यानी, एससीएल सर्वर द्वारा होस्ट किए गए सीएलआर नहीं) पर सब कुछ करने में सक्षम होने की उम्मीद न करें - SQLCLR सैंडबॉक्स वाला रनटाइम है।
  3. जैसा Assembly.Load()कि उद्देश्यपूर्ण रूप से प्रतिबंधित है , विधानसभाओं को गतिशील रूप से प्रयास और लोड न करें ।
  4. यदि आप उपयोग करने की योजना बनाते हैं, तो आपको सार्वजनिक कुंजी के साथ तीसरी पार्टी लाइब्रेरी पर हस्ताक्षर करने की आवश्यकता होगी UNSAFE
  5. कोड चलाने वाली सेवा की पहचान के संदर्भ में रनिंग Sql Server (मुझे लगता है!)
  6. होस्टेड असेंबली (जैसे के माध्यम से context connection = true;) से बना डेटाबेस एक्सेस जुड़े हुए उपयोगकर्ता के संदर्भ में चलता है, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि आप जानते हैं कि आपके डेटा के लिए लाइब्रेरी की क्या पहुँच है।

4 से ऊपर आपको विधानसभा में हस्ताक्षर करना है। मुझे वह हिस्सा मिलता है, और यहाँ स्वनिर्धारित निर्देशों के माध्यम से करने में सक्षम हो गया है: geekswithblogs.net/ktegels/archive/2006/02/16/…… लेकिन जब आपके पास निजी कुंजी नहीं है, तो प्रमाण पत्र कैसे स्थापित करें असेंबली बनाई गई थी और एक विश्वसनीय तीसरे पक्ष द्वारा हस्ताक्षरित थी? जहां तक ​​मैं प्रमाण पत्र के निर्माण के ऊपर लिंक में बता सकता हूं कि उपस्थित होने के लिए निजी कुंजी की आवश्यकता होती है। ऐसा लगता है कि यह असंभव है?
जॉर्गेस्ंडोवाल

2
इसके अलावा - db को भरोसेमंद के रूप में चिह्नित करना जोखिम भरा है (और "सुरक्षित" विधानसभा स्थापना के लिए आवश्यक है)। भरोसेमंद बाहरी / असुरक्षित अनुमतियों के लिए असेंबली पर हस्ताक्षर करने का एक तरीका है, लेकिन अनुशंसित नहीं है क्योंकि स्थापित सीएलआर विधानसभा पर भरोसा किया जाएगा ...
JorgeSandoval

5

मैं मान रहा हूँ कि आप Visual Studio से SQL CLR असेंबली स्थापित करने के विकल्पों के बारे में पूछ रहे हैं।

Visual Studio में कोड होने की आवश्यकता नहीं है।

MSDN पर CLR डेटाबेस ऑब्जेक्ट परिनियोजित करना SQL कथन और परिनियोजन स्क्रिप्ट सहित विकल्पों का विवरण देता है।


1

मैं एक बहुत बड़ी 3rd पार्टी DLL का उपयोग करता हूँ जो एक वेब पेज लेता है और इसे एक PDF में रूपांतरित करता है।

पीडीएफ एक फ़ाइल शेयर पर सहेजा जाता है और डेटाबेस को स्थान और प्रकार के अनुसार अपडेट किया जाता है।

यह एक 3-चरण प्रक्रिया है:

  1. एक कंसोल ऐप बनाएँ जो पीडीएफ बनाने के लिए 3rd पार्टी DLL का उपयोग करता है और URL और FilePath को मापदंडों के रूप में स्वीकार करता है और पीडीएफ आकार और पृष्ठों की संख्या लौटाता है।

  2. एक CLR संग्रहीत कार्यविधि बनाएँ जो सर्वर पर कंसोल ऐप को कॉल करती है

  3. मैं यह सब एक एकल संग्रहित प्रक्रिया में लपेटता हूं जो पीडीएफ बनाने के लिए सीएलआर ऐप को कॉल करता है और फिर मैं इसके बारे में मेटा-डेटा को डेटाबेस में लिखता हूं।

मुझे लगता है कि यह सही नहीं है और किसी भी तरह से आपको ट्रिगर के अंदर इतना कुछ नहीं करना चाहिए!

मैं केवल दूसरों के लिए यहां उल्लेख करता हूं कि उनके सीएलआर में तीसरे पक्ष के डीएलएल का उपयोग करने के बारे में प्रश्न हैं।

मेरी आशा है कि 3rd पार्टी DLL को चलाने के लिए cmd.exe कंसोल को बंद करके, सब-इन को चलाने के बजाय, यदि यह क्रैश हो जाता है, तो यह SQL सर्वर पर उतना प्रतिकूल प्रभाव नहीं डालेगा। यही मैं उम्मीद करता हूं।

कृपया टिप्पणी करें कि क्या यह वास्तव में खराब दृष्टिकोण है और क्यों।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.