TRUSTWORTHY
डेटाबेस की संपत्ति (जब ON
पर सेट किया जाता है ) अनिवार्य रूप से SQL सर्वर को घोषित करता है कि उस डेटाबेस में निहित कोड, और एक प्रतिरूपित संदर्भ में निष्पादित होने पर, उस प्रतिरूपित सुरक्षा संदर्भ को बनाए रखते हुए उस डेटाबेस के बाहर पहुंचने की अनुमति दी जानी चाहिए। यह सभी . के लिए भी अनुमति देता है उस डेटाबेस में SQLCLR असेंबलियों को EXTERNAL_ACCESS
पर सेट किया जाना है और UNSAFE
, वह कोड सर्वर के बाहर पहुंचता है या नहीं (अर्थ के बाहर:नेटवर्क एक्सेस, फाइल सिस्टम एक्सेस, रजिस्ट्री एक्सेस, एनवायरनमेंट एक्सेस, आदि)।
यह इसके लिए अनुमति देने का एक सामान्य साधन है क्योंकि यह डेटाबेस के भीतर सभी कोड को कवर करता है। मॉड्यूल पर हस्ताक्षर करने के लिए प्रमाणपत्र और/या असममित कुंजियों का उपयोग करना--प्रोसेस और/या असेंबली-- किस कोड में क्या अनुमतियां हैं, इस पर अधिक बारीक नियंत्रण की अनुमति देता है।
डेटाबेस को TRUSTWORTHY
. पर सेट करना इस डेटाबेस में शुरू होने वाली किसी भी प्रक्रिया को सर्वर-स्तर तक और/या अन्य डेटाबेस तक पहुंचने की अनुमति देता है। आम तौर पर एक प्रक्रिया को उस डेटाबेस तक सीमित/संगरोध किया जाता है जहां से यह शुरू हुआ था। यदि डेटाबेस "sa" लॉगिन के स्वामित्व में है, तो उस डेटाबेस में शुरू की गई और "dbo" के रूप में चलने वाली किसी भी प्रक्रिया में प्रभावी रूप से "sa" विशेषाधिकार होंगे (yikes!)।
यहां वर्णन करने की कोशिश करने के बजाय, प्रतिरूपण के बारे में बारीकियों को पूरी तरह से संप्रेषित करने के लिए आवश्यक विवरण की मात्रा में, उक्त प्रतिरूपण का विस्तार करना, मॉड्यूल पर हस्ताक्षर करना, आदि, मैं इस विषय पर निम्नलिखित संसाधनों का उपयोग करने की सलाह देता हूं:
- कृपया, कृपया , कृपया प्रतिरूपण, भरोसेमंद, और क्रॉस-डीबी स्वामित्व श्रृंखला का उपयोग करना बंद करें
- SQL सर्वर में TRUSTWORTHY डेटाबेस सेटिंग का उपयोग करने के लिए दिशानिर्देश
- EXECUTE AS का उपयोग करके डेटाबेस प्रतिरूपण का विस्तार करना
यह एक बहुत ही जानकारीपूर्ण दस्तावेज़ है जिसमें इस विषय के अधिकांश पहलुओं को शामिल किया गया है, और इसे ऊपर लिंक किए गए पृष्ठ में भी संदर्भित किया गया है। - सीढ़ी से SQLCLR स्तर 4:सुरक्षा (बाहरी और असुरक्षित असेंबली)
यह एक लेख है जिसे मैंने SQLCLR पर एक श्रृंखला के भाग के रूप में लिखा है जिसमें ऐसे उदाहरण हैं जो TRUSTWORTHY विधि और हस्ताक्षरित असेंबली-आधारित लॉगिन विधि के बीच के अंतरों को स्पष्ट करते हैं; नि:शुल्क पंजीकरण आवश्यक है।
आपको अपने डेटाबेस को TRUSTWORTHY
. पर सेट करने से बचना चाहिए जितना संभव। यदि आपके पास वास्तव में मल्टीथ्रेडिंग / एसिंक्स कॉल्स होनी चाहिए और यदि आपके पास स्रोत कोड है और असेंबली को संकलित कर रहे हैं, तो मैं SET TRUSTWORTHY ON
का उपयोग करने के लिए एक कारण के बारे में नहीं सोच सकता। विकल्प। इसके बजाय, आपको असेंबली पासवर्ड के साथ . पर हस्ताक्षर करना चाहिए और EXTERNAL_ACCESS
को अनुमति देने के पसंदीदा तरीके को सेट करने के लिए निम्न कमांड का उपयोग करें और UNSAFE
असेंबली:
USE [master];
CREATE ASYMMETRIC KEY [ClrPermissionsKey]
AUTHORIZATION [dbo]
FROM EXECUTABLE FILE = 'C:\path\to\my\assembly.dll';
CREATE LOGIN [ClrPermissionsLogin]
FROM ASYMMETRIC KEY [ClrPermissionsKey];
GRANT UNSAFE ASSEMBLY TO [ClrPermissionsLogin];
एक बार यह हो जाने के बाद, आप उस डेटाबेस पर जा सकते हैं जहाँ आपकी असेंबली लोड की गई है और चलाएँ:
PERMISSION_SET =UNSAFE के साथALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;
या आप WITH PERMISSION_SET = UNSAFE
. शामिल कर सकते थे CREATE ASSEMBLY
. के अंत में आदेश।