2011-05-31 17 views
6

मुझे डेटाबेस में SQLCLR असेंबली जोड़ने में समस्या हो रही है, लेकिन मेरे एक सहकर्मी को कोई समस्या नहीं है। यद्यपि हमारे पास पहुंच के विभिन्न स्तर हैं, लेकिन हम यह नहीं समझ सकते कि मुझे त्रुटि संदेश क्यों मिल रहा है।डेटाबेस में SQLCLR असेंबली नहीं जोड़ सकता, संदेश 300

यहाँ मेरी कोड है:

USE [mydatabase] 
GO 

CREATE ASSEMBLY [My.Assembly] 
AUTHORIZATION [dbo] 
FROM 'C:\Program Files\MyStuff\My.Assembly.dll' 
WITH PERMISSION_SET = UNSAFE 
GO 

और यहाँ मेरी त्रुटि है:

Msg 300, Level 14, State 1, Line 3
UNSAFE ASSEMBLY permission was denied on object 'server', database 'master'.

विचार?

+0

इससे संकेत मिलेगा कि आप 'मास्टर' डेटाबेस में असेंबली जोड़ रहे हैं। क्या ये सही है? –

+0

क्या लॉगिन आप 'sysadmin' भूमिका के सदस्य का उपयोग करते हैं? – a1ex07

+0

@ नील नाइट: यही समस्या है, मुझे नहीं पता कि यह "डेटाबेस" मास्टर क्यों कहता है। मेरे पास 'mydatabase] उपयोग है क्योंकि मैं' mydatabase ' – MStodd

उत्तर

3

मुझे लगता है कि आपको कोई समस्या है क्योंकि लॉगिन sysadmin का सदस्य नहीं है। MSDN कहता है, "यदि PERMISSION_SET = UNSAFE निर्दिष्ट है, तो sysadmin निश्चित सर्वर भूमिका में सदस्यता की आवश्यकता है"

+1

यह उत्तर काफी गलत है, हालांकि उस समय एमएसडीएन दस्तावेज के रूप में आपकी गलती गलत नहीं थी। विवरण के लिए कृपया मेरा [उत्तर] (http://stackoverflow.com/a/38213540/577765) देखें। कृपया इस उत्तर के शीर्ष पर एक नोट भी दें जो लोगों को 'sysadmin' सर्वर भूमिका में लॉग इन जोड़ने के लिए _not_ जोड़ने के लिए निर्देशित करता है क्योंकि यह _huge_ सुरक्षा जोखिम है। –

0

क्या आपने विश्वसनीय गुण सेट करने के लिए डेटाबेस गुणों को बदल दिया है?

वैकल्पिक डाटाबेसनाम सेट ट्रस्टवर्थी चालू;

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

+1

'ट्रस्टवर्थी' के पास इस त्रुटि से कोई लेना देना नहीं है। प्रश्न में त्रुटि संदेश बताता है कि कौन सी अनुमति गुम है। 'ट्रस्टवॉर्थी 'को' चालू 'पर सेट नहीं किया जाना चाहिए जब तक कि यह आवश्यक रूप से आवश्यक नहीं है क्योंकि यह एक सुरक्षा जोखिम है। –

3

कृपया sysadmin पर एक लॉगिन जोड़ें इस त्रुटि को दूर करने के लिए निश्चित सर्वर भूमिका जोड़ें। यह बिल्कुल जरूरी नहीं है!

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

स्पष्ट होने के लिए, यह पोस्टर की गलती नहीं है क्योंकि उन्होंने एमएसडीएन दस्तावेज़ों को सही ढंग से उद्धृत किया है। समस्या यह है कि CREATE ASSEMBLY के लिए एमएसडीएन दस्तावेज गलत था। दुर्भाग्यवश, documentation for SQL Server 2008 R2 ने कहा कि लॉगिन sysadmin सर्वर रोल में होना था। हालांकि, it has since been corrected राज्य के लिए:

If PERMISSION_SET = UNSAFE is specified, requires UNSAFE ASSEMBLY permission on the server.

यह अनुमति UNSAFE ASSEMBLY, सटीक अनुमति त्रुटि संदेश में कहा गया है:

UNSAFE ASSEMBLY permission was denied on object 'server', database 'master'

अर्थ, की आवश्यकता होती है निम्नलिखित (एक बार) करने के लिए :

USE [master]; 
GRANT UNSAFE ASSEMBLY TO [AD_domain_name\windows_login_name]; -- for Windows Logins 

या:

USE [master]; 
GRANT UNSAFE ASSEMBLY TO [sql_login_name]; -- for SQL Server Logins 

[master] डेटाबेस में होने की आवश्यकता यह है कि यह अनुमति सर्वर-स्तर है, डेटाबेस-स्तर नहीं, अनुमति जो लॉगिन्स (जो सर्वर-स्तर पर मौजूद है) पर लागू होने की आवश्यकता है, और उपयोगकर्ता नहीं (जो डाटाबेस-स्तर पर मौजूद है)।

और यह कारण है कि त्रुटि संदेश का संदर्भ object 'server' है और database 'master' (क्योंकि यह एक सर्वर-स्तर अनुमति है) (क्योंकि लॉगिन [master] डाटाबेस में मौजूद हैं और जब क्वेरी के लिए वर्तमान डाटाबेस [master] पर सेट है केवल संशोधित किया जा सकता) ।

मैंने इसे एक लॉगिन के साथ परीक्षण किया है जो WITH PERMISSION_SET = UNSAFE के रूप में चिह्नित असेंबली को लोड करने का प्रयास करते समय प्रश्न में दिखाए गए त्रुटि संदेश (यानी Msg 300) प्राप्त करेगा। मैंने तब UNSAFE ASSEMBLY अनुमति दी और लॉगिन UNSAFE असेंबली लोड करने में सक्षम था; नहीं sysadmin सदस्यता की आवश्यकता थी (या यहां तक ​​कि प्रयास किया गया)। मैंने इसका परीक्षण किया: एसक्यूएल सर्वर 2005 एसपी 4, एसक्यूएल सर्वर 2008 आर 2 आरटीएम, और एसक्यूएल सर्वर 2012 एसपी 3।

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