6

मैं अभी SQL2000 से SQL2008 में माइग्रेट कर चुका हूं और मैंने एक संग्रहित प्रो पर निष्पादन अनुमति समस्या प्राप्त करना शुरू कर दिया है जो sp_OACreate का उपयोग करता है।एसक्यूएल सर्वर निष्पादन अनुमति; अनुमतियों को लागू करने में विफलता

शेष सिस्टम डीबी लॉगिन के साथ ठीक काम करता है जिसे सेटअप और डेटाबेस में जोड़ा गया है।

मैं कोशिश की है:

USE master 
GO 
GRANT EXEC ON sp_OACreate TO [dbuser] 
GO 

लेकिन यह निम्न त्रुटि के साथ विफल:

Msg 15151, Level 16, State 1, Line 1 Cannot find the user 'dbuser', because it does not exist or you do not have permission.

मैं पूर्ण अनुमतियों वाले सा के रूप में सर्वर में लॉग इन कर रहा हूँ। मैं एक समान एसक्यूएल कथन निष्पादित कर सकता हूं और सर्वर की भूमिका में अनुमतियां लागू कर सकता हूं, हालांकि लॉगिन/उपयोगकर्ता नहीं।

मैं विशिष्ट उपयोगकर्ता/लॉगिन में परिवर्तन कैसे लागू करूं?

मैं सार्वजनिक भूमिका के लिए अनुमतियां लागू कर सकता हूं और यह मेरी समस्या का समाधान करता है; हालांकि यह मेरे लिए एक सुरक्षा मुद्दा प्रतीत होता है जिसे मैं वास्तव में लाइव सर्वर पर लागू नहीं करना चाहता हूं।

उत्तर

5

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

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

USE MASTER 
GO 

GRANT EXECUTE ON [sys].[sp_OADestroy] TO [dbuser] 
GO 
GRANT EXECUTE ON [sys].[sp_OACreate] TO [dbuser] 
GO 
GRANT EXECUTE ON [sys].[sp_OAMethod] TO [dbuser] 
GO 
GRANT EXECUTE ON [sys].[sp_OASetProperty] TO [dbuser] 
GO 

सभी मदद और पॉइंटर्स के लिए धन्यवाद। उम्मीद है कि यह भविष्य में अन्य लोगों की मदद करेगा।

+0

आपने अपने डेटाबेस कैसे माइग्रेट किए? यदि आपने मास्टर डेटाबेस को पुनर्स्थापित नहीं किया है तो उपयोगकर्ता "dbuser" मौजूद नहीं होता और इसलिए मैप नहीं किया जाता। –

+0

@ जॉन - आप सही हैं। मास्टर डेटाबेस की बहाली कुछ ऐतिहासिक बुरी बिट्स और बॉब्स के कारण नहीं की गई थी, जिन्हें हम माइग्रेशन से दूर जाना चाहते थे। दुर्भाग्यवश हमने उन उपयोगकर्ताओं को भी खो दिया जो अब पुनः निर्मित और लॉग इन करने के लिए मैप किए गए हैं :-) – WestDiscGolf

1

जांचें कि आपके उपयोगकर्ता के पास आपके द्वारा उपयोग किए जाने वाले डेटाबेस के लिए अनुमतियां हैं या नहीं। आप इसे Security -> Logins -> Select User द्वारा कर सकते हैं और गुण विंडो खोल सकते हैं। फिर दाएं मेनू से "User Mapping" का चयन करें। अब उन डेटाबेस को जांचें जिन्हें आप चाहते हैं कि उपयोगकर्ता को एक्सेस हो। उसके बाद "डेटाबेस भूमिका सदस्यता" विंडो के निचले भाग से चुनें और "db_owner" देखें। अब उपयोगकर्ता डेटाबेस का मालिक होगा और क्वेरी, स्टोर प्रक्रियाओं आदि को निष्पादित करने में सक्षम होगा।

अद्यतन:
अपने डेटाबेस का चयन करके डेटाबेस के लिए उपयोगकर्ता जोड़ें -> सुरक्षा -> उपयोगकर्ताओं -> राइट क्लिक करें "New User"
या आप इस क्वेरी

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy'; 
USE AdventureWorks2008R2; 
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem; 
GO 

यहाँ कर रहे हैं अधिक जानकारी के लिए उपयोग कर सकते http://msdn.microsoft.com/en-us/library/ms173463.aspx

+0

आपके उत्तर के लिए धन्यवाद। उपयोगकर्ता के लिए db_owner भूमिका डेटाबेस पर सेट है। मैंने db_owner भूमिका में विशिष्ट निष्पादन अनुमतियों को जोड़ने का प्रयास किया है और मुझे निम्न त्रुटि संदेश मिलता है "विशेष भूमिकाओं के लिए या अनुमतियों को अनुमति, अस्वीकार या निरस्त नहीं कर सकता।" – WestDiscGolf

+0

जांचें कि क्या आपके पास अपने डेटाबेस से जुड़ा कोई उपयोगकर्ता है। ऐसा लगता है कि आपके पास केवल लॉगिन है लेकिन उपयोगकर्ता नहीं। – Thea

+0

यह मामला प्रतीत होता था; मैंने इस मुद्दे को हल करने के लिए किए गए कार्यों का एक जवाब जोड़ा है। मदद के लिए धन्यवाद :-) – WestDiscGolf

2

आपकी समस्या अनाथ उपयोगकर्ताओं से संबंधित हो सकती है।

USE MASTER 
GO 
EXEC sp_change_users_login 'Report' 

यह प्रयास करें प्रति अनाथ उपयोगकर्ता नाम एक पंक्ति वापस आ जाएगी। फिर,

EXEC sp_change_users_login 'Update_One', 'dbuser', 'dbuser' 
+0

आपके उत्तर के लिए धन्यवाद। मैंने सर्वर पर पहला आदेश चलाया है और क्वेरी द्वारा कोई रिकॉर्ड वापस नहीं किया गया है। – WestDiscGolf

+0

सही दिशा में मदद के लिए धन्यवाद। +1 :-) – WestDiscGolf

4

त्रुटि से पता चलता है कि उपयोगकर्ता "dbuser" मास्टर डेटाबेस में मौजूद नहीं है।

मुझे लगता है कि उपयोगकर्ता मास्टर डेटाबेस में मौजूद है?

आप उपयोगकर्ता निकलती है तो मौजूद नहीं निम्नलिखित T-SQL

USE MASTER; 
GO 

SELECT * 
FROM sys.sysusers 
WHERE name = 'dbuser' 

का उपयोग करके जांच कर सकते हैं, बस CREATE USER कथन का उपयोग और एक उपयोगकर्ता "dbuser" कहा जाता है पैदा करते हैं। उपयोगकर्ता को स्वचालित रूप से उसी नाम के लॉगिन पर मैप किया जाएगा, बशर्ते एक मौजूद हो।

+0

आपके उत्तर के लिए धन्यवाद। नहीं, यह sysusers तालिका में मौजूद नहीं है। इसे फिर से जोड़ा जा सकता है? – WestDiscGolf

+0

ठीक है, उपयोगकर्ता को दोबारा जोड़ा और dbuser लॉगिन के साथ इसे जोड़ा। मैंने तब उपयोगकर्ता को अनुदान अनुमतियां लागू की हैं। :-) – WestDiscGolf

+0

@WestDiscGolf: उत्कृष्ट समाचार, मदद करने में खुशी हुई। पॉइंटर्स के लिए –

2

यहाँ कुछ कोड मुझे लगता है कि (वर्तमान उपयोगकर्ता) को सत्यापित का उपयोग कर रहा है sp_OACreate आदि पर निष्पादन अनुमति है:

use master; 
select state_desc,name from 
sys.database_permissions a 
left join 
sys.all_objects b 
on a.major_id = b.object_id 
where name like 'sp_OA%'; 

के रूप में @ जॉन Sansom और @WestDiscGolf उपयोगकर्ता में मौजूद है द्वारा बताया मास्टर डेटाबेस और निष्पादन अधिकार मास्टर डेटाबेस में प्रदान किए जाने चाहिए, इसलिए use Master आवश्यक है। उपर्युक्त क्वेरी रिकॉर्ड वापस कर देगी यदि उपयोगकर्ता निष्पादित अनुमतियां और खाली सेट अगर वे नहीं करते हैं। (उपयोगकर्ता डेटाबेस में निष्पादन भी खाली सेट लौटाएगा।)

मैं fn_my_permissions का उपयोग करके इन अनुमतियों को जांचने का तरीका नहीं समझ पाया, जो इस तरह की नौकरियों के लिए सही उपकरण है।

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