ऑब्जेक्ट 'उपयोगकर्ता', डेटाबेस 'XXX', स्कीमा 'dbo' पर SELECT अनुमति को अस्वीकार कर दिया गया था


83

मैंने SQL Server 2012 से एक डेटाबेस Azure में स्थानांतरित कर दिया। मैं उपयोगकर्ता का उपयोग नहीं करना चाहता master, इसलिए मैंने एक उपयोगकर्ता बनाया test। यह वही है जो मैंने Azure पर डेटाबेस XXX के लिए किया था:

create user test from login test with default_schema=[dbo]
exec sp_addrolemember 'db_owner','test'

मैंने जाँच की, और जिन डेटाबेस ऑब्जेक्ट्स में मेरी दिलचस्पी है, वे सभी स्कीमा में हैं dbo। तालिका Usersस्कीमा में है dbo

मेरे वेब प्रोजेक्ट में कनेक्शन स्ट्रिंग testलॉगिन के रूप में है। यह त्रुटि संदेश उत्पन्न करता है:

The SELECT permission was denied on the object 'Users', database 'XXX', schema 'dbo'

त्रुटि संदेश का क्या अर्थ है और मैं उपयोगकर्ता testको डेटाबेस XXX तक पहुंचने के लिए क्या कर सकता हूं ?


यह सवाल पूछने के लिए धन्यवाद :)
कमलेश

जवाबों:


76

मुझे लगता है कि समस्या उपयोगकर्ता के लिए विशेषाधिकार से वंचित है । यह त्रुटि तब आती है जब आपके द्वारा बनाए गए उपयोगकर्ता के पास डेटाबेस में अपनी तालिकाओं तक पहुंचने के लिए पर्याप्त विशेषाधिकार नहीं होते हैं। आप जो चाहते हैं उसे पाने के लिए उपयोगकर्ता को विशेषाधिकार प्रदान करें।

GRANT इस तरह का चयन करें, सम्मिलित करें, अद्यतन के रूप में उपयोगकर्ता विशिष्ट अनुमतियों और उस डेटाबेस में टेबल पर DELETE।


3
कभी-कभी आपको db data reader / db owner विकल्प याद आ रहे होंगे? windowstechinfo.com/2014/09/…
अरविंदा

5
मुझे 'db_denydatareader' और 'db_denydatawriter' को अनचेक करना था और मुझे लगता है कि SaeX का अर्थ "रिवोक" है। धन्यवाद SaeX।
ए.एच.

@ हा। मुझे आपके समान ही समस्या थी, इसलिए मैंने इस प्रश्न का उत्तर लिखा। अगर आपको मौका मिले तो इसे देख लें
कोलोब कैनियन

आप जीवन रक्षक हैं, बहुत बहुत धन्यवाद :)
Kamlesh

58
  1. SQL प्रबंधन स्टूडियो खोलें
  2. अपने डेटाबेस का विस्तार करें
  3. "सुरक्षा" फ़ोल्डर का विस्तार करें
  4. "उपयोगकर्ता" का विस्तार करें
  5. उपयोगकर्ता पर क्लिक करें (क्वेरी को निष्पादित करने का प्रयास कर रहा है) और चयन करें Properties
  6. पेज का चयन करें Membership
  7. सुनिश्चित करें कि आप अनचेक करें

    db_denydatareader

    db_denydatawriter

यहाँ छवि विवरण दर्ज करें

यह बिना कहे चला जाना चाहिए, लेकिन उपयोगकर्ता को जो कुछ भी चाहिए उसे केवल अनुमति दें। एक आसान आलसी फिक्स है db_owner, जैसे मेरे पास है, लेकिन यह सबसे अच्छा सुरक्षा अभ्यास नहीं है।


4
आप जीवन रक्षक हैं, बहुत बहुत धन्यवाद :)
Kamlesh

1
तुम मुझे समय बर्बाद कर बर्बाद और हताशा के घंटे बचा लिया है!
स्कॉट फ्लेमिंग

2
हम में से कई लोग बस यह मानकर कि हम सभी अनुमति प्राप्त करेंगे, उन सभी का चयन करते हैं। हालाँकि वहाँ denyभी है
मुरली मुरुगेसन

30

विशिष्ट तालिका पर चयन अनुमति देने के लिए सिंटैक्स:

USE YourDB;

GRANT SELECT ON dbo.functionName TO UserName;

डेटाबेस में सभी तालिकाओं पर चयन अनुमति देने के लिए:

USE YourDB;

GRANT SELECT TO UserName;

2
पहली बार मैंने ऐसा किया है तो मुझे यकीन नहीं है कि यह सही था, लेकिन मैं पूरे डेटाबेस के लिए चयन की अनुमति देना चाहता था इसलिए मैंने उपयोगकर्ता नाम का चयन किया और ऑन क्लॉज को छोड़ दिया। इसने काम कर दिया।
रिच

18

जब मैंने इसका सामना किया तो मैं इस समस्या को हल करने में सक्षम था

  1. SQL प्रबंधन स्टूडियो प्रारंभ करें।
  2. सर्वर नोड ('ऑब्जेक्ट एक्सप्लोरर' में) का विस्तार करें।
  3. डेटाबेस नोड का विस्तार करें और फिर विशिष्ट डेटाबेस का विस्तार करें जिसे आप विशिष्ट उपयोगकर्ता का उपयोग करके एक्सेस करने का प्रयास कर रहे हैं।
  4. डेटाबेस के लिए सुरक्षा नोड के तहत उपयोगकर्ता नोड का विस्तार करें।
  5. विशिष्ट उपयोगकर्ता पर राइट क्लिक करें और 'गुण' पर क्लिक करें। आपको एक डायलॉग बॉक्स मिलेगा।
  6. सुनिश्चित करें कि उपयोगकर्ता db_owner समूह का सदस्य है (कृपया इस पथ का उपयोग करने से पहले टिप्पणी पढ़ें) और दृश्य का उपयोग करके अन्य आवश्यक परिवर्तन करें। (मैंने 2016 के लिए इसका उपयोग किया। यह निश्चित नहीं है कि विशिष्ट संवाद दूसरे संस्करण में कैसा दिखता है और इसलिए विशिष्ट नहीं है)

6
सावधान रहें जो आपने db_owner डेटाबेस भूमिका में रखा है। सभी उपयोगकर्ताओं को उस भूमिका में नहीं जोड़ा जाना चाहिए।
रॉड

1
@Rod यदि db_owner को देने की अनुशंसा नहीं की जाती है, तो डेटाबेस के साथ बातचीत करने के लिए किस एक्सेस प्रकार की सिफारिश की जाती है?
याकूब

1
क्या जनता पर्याप्त होगी?
रॉड

2
@Jacob किसी भी तालिका में डेटा लिखने और पढ़ने के लिए आईडी db_datareader और db_datawriter। db_owner टेबल परिभाषाओं को संशोधित करने की अनुमति भी देता है।
Oskar Berggren

3
यह काम नहीं करता है अगर उपयोगकर्ता ने चेक किया है db_denydatareadeयाdb_denydatawriter
Kolob Canyon


0

अपने डेटाबेस की जगह की जाँच करें। यह त्रुटि तब आती है जब अंतरिक्ष डेटाबेस से दिए गए स्थान की तुलना में बढ़ जाता है।


डेटाबेस उपयोगकर्ता नाम और पासवर्ड भी बदलें
नीलेश

0

SSMS का उपयोग करते हुए, मैंने सुनिश्चित किया कि उपयोगकर्ता के पास डेटाबेस और ReportServer दोनों पर अनुमतियाँ थीं।

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

मैं अपनी रिपोर्ट के लिए db स्वामित्व को सक्षम नहीं करना चाहता था क्योंकि उन्हें केवल चुनिंदा अनुमतियों की आवश्यकता थी।


-1

मैं अपनी समस्या को हल कर रहा हूं। [महत्वपूर्ण नोट: यह विशेष खाते में बढ़े हुए (विस्तारित) विशेषाधिकारों की अनुमति देता है, संभवतः व्यक्तिगत परिदृश्य के लिए इससे अधिक आवश्यक है]।

  1. SQL मैनेजमेंट स्टूडियो के ' ऑब्जेक्ट एक्सप्लोरर ' पर जाएं ।
  2. सुरक्षा का विस्तार करें , फिर लॉगिन करें
  3. उस उपयोगकर्ता का चयन करें जिसके साथ आप काम कर रहे हैं, फिर राइट क्लिक करें और गुण विंडोज चुनें ।
  4. में चयन एक पृष्ठ , पर जाएं सर्वर भूमिकाएँ
  5. Sysadmin पर क्लिक करें और सहेजें।

2
यकीन नहीं हुआ, तो यह जवाब क्यों नहीं दिया गया। इस जवाब ने मेरी समस्या हल कर दी। इसलिए, मैंने उत्थान किया है।
इमरान हुसैन

9
इस उत्तर को अस्वीकार कर दिया जाना चाहिए क्योंकि यह स्पष्ट रूप से पाठक को यह बताता है कि उपयोगकर्ता वस्तु को पूर्ण, संपूर्ण और संपूर्ण सर्वर के संपूर्ण नियंत्रण को बिना बताए या चेतावनी के देता है कि यह क्या करता है। प्रश्न के उत्तर और इस उत्तर के आधार पर, मुझे लगता है कि कुछ खतरे हैं जो नौसिखिए उपयोगकर्ता पूरी तरह से समझ के बिना इस "फिक्स" को लागू करेंगे।
Oskar Berggren

3
यह एक क्रूर बल विकल्प है जिसे लागू नहीं किया जाना चाहिए। यदि आपको समझ में नहीं आता है कि यह क्या कर रहा है तो आपको ऐसा नहीं करना चाहिए।
एन 8।

सभी - उत्पादन वातावरण में ऐसा नहीं करते हैं।
गत

निश्चित रूप से मैं ऐसा नहीं करूंगा, लेकिन इसने मेरी समस्या (देव वातावरण में) हल कर दी। इसलिए यह मेरे उत्थान के योग्य है। धन्यवाद ccassob
Fl4v

-2

हो सकता है आपका Plesk पैनल या अन्य पैनल सदस्यता समाप्त हो गई हो .... कृपया सदस्यता समाप्त जांचें।


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